簡體   English   中英

用於打開文件夾中所有excel文件的VBA代碼

[英]VBA code to open all excel files in a folder

我正在使用vba,我正在嘗試根據單元格值打開文件夾(大約8-10)中的所有excel文件。 我想知道這是否是打開它的正確方法,它在我編寫目錄時不斷給出語法錯誤。 當我重寫那個部分時,vba只會彈出msgbox,這意味着它必須循環並做一些正確的事情? 但沒有打開任何文件。 任何信息都會有幫助。 非常感謝你們花時間以任何方式幫助我。

Sub OpenFiles()

Dim search As Worksheet
Dim customer As Range
Dim customerfolder As Range

Dim QualityHUB As Workbook

'setting variable references
Set QualityHUB = ThisWorkbook
Set search = Worksheets("Search")
Set customer = Worksheets("Search").Range("$D$1")
Set customerfolder = Worksheets("Search").Range("$D$3")


With QualityHUB

If IsEmpty((customer)) And IsEmpty((customerfolder)) Then

MsgBox "Please Fill out Customer Information and search again"

Exit Sub

End If

End With

With QualityHUB


Dim MyFolder As String
Dim MyFile As String
Dim Directory As String

Directory = "O:\LAYOUT DATA\" & customer & "\" & customerfolder"


MyFile = Dir(Directory & "*.xlsx")


Do While MyFile <> ""

Workbooks.Open Filename:=MyFile

MyFile = Dir()


Loop


MsgBox "Files Open for " + customerfolder + " complete"


End With


End Sub

這對我很有用

Sub OpenFiles()

Dim search As Worksheet
Dim customer As Range
Dim customerfolder As Range

Dim QualityHUB As Workbook

'setting variable references
Set QualityHUB = ThisWorkbook
Set search = Worksheets("Search")
Set customer = Worksheets("Search").Range("$D$1")
Set customerfolder = Worksheets("Search").Range("$D$3")


With QualityHUB

If IsEmpty((customer)) And IsEmpty((customerfolder)) Then

    MsgBox "Please Fill out Customer Information and search again"

Exit Sub

End If

End With

With QualityHUB


Dim MyFolder As String
Dim MyFile As String
Dim Directory As String

Directory = "O:\LAYOUT DATA\" & customer & "\" & customerfolder & "\"


MyFile = Dir(Directory & "*.xlsx")

Do While MyFile <> ""

Workbooks.Open Filename:=Directory & MyFile

MyFile = Dir()


Loop


MsgBox "Files Open for " + customerfolder + " complete"


End With


End Sub



其中一個問題是,你必須寫

Workbooks.Open Filename:=Directory & MyFile

代替

Workbooks.Open Filename:=MyFile

糾正了代碼的一些問題並將其清理干凈,試一試。 我認為最大的問題是你有一個額外的雙引號,你錯過了目錄行中的結尾\\:

Sub OpenFiles()

    Dim QualityHUB As Workbook
    Dim search As Worksheet
    Dim customer As String
    Dim customerfolder As String
    Dim Directory As String
    Dim MyFile As String

    'setting variable references
    Set QualityHUB = ThisWorkbook
    Set search = QualityHUB.Worksheets("Search")
    customer = search.Range("$D$1").Value
    customerfolder = search.Range("$D$3").Value

    If Len(Trim(customer)) = 0 Or Len(Trim(customerfolder)) = 0 Then
        MsgBox "Please Fill out Customer Information and search again"
        Exit Sub
    End If


    Directory = "O:\LAYOUT DATA\" & customer & "\" & customerfolder & "\"   '<--- This requires the ending \
    MyFile = Dir(Directory & "*.xlsx")

    Do While Len(MyFile) > 0
        Workbooks.Open Filename:=Directory & MyFile
        MyFile = Dir()
    Loop

    MsgBox "Files Open for " + customerfolder + " complete"

End Sub

我在網上發現了這個代碼,它將打開文件夾中的所有excel文件,一旦打開,你可以調整代碼將一個函數應用到工作簿。

Option Explicit

Type FoundFileInfo
    sPath As String
    sName As String
End Type

Sub find()
Dim iFilesNum As Integer
Dim iCount As Integer
Dim recMyFiles() As FoundFileInfo
Dim blFilesFound As Boolean

blFilesFound = FindFiles("G:\LOCATION OF FOLDER HERE\", _
       recMyFiles, iFilesNum, "*.xlsx", True)
End Sub

Function FindFiles(ByVal sPath As String, _
    ByRef recFoundFiles() As FoundFileInfo, _
    ByRef iFilesFound As Integer, _
    Optional ByVal sFileSpec As String = "*.*", _
    Optional ByVal blIncludeSubFolders As Boolean = False) As Boolean
    Dim iCount As Integer           '* Multipurpose counter
    Dim sFileName As String         '* Found file name
    Dim wbResults, file, WS_Count, i, gcell, col, finRow, wbCodeBook As Workbook, lCount, name, looper
    Dim WorksheetExists
    Set wbCodeBook = ThisWorkbook

    '*
    '* FileSystem objects
    Dim oFileSystem As Object, _
        oParentFolder As Object, _
        oFolder As Object, _
        oFile As Object

    Set oFileSystem = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next
    Set oParentFolder = oFileSystem.GetFolder(sPath)
    If oParentFolder Is Nothing Then
        FindFiles = False
        On Error GoTo 0
        Set oParentFolder = Nothing
        Set oFileSystem = Nothing
        Exit Function
    End If
    sPath = IIf(Right(sPath, 1) = "\", sPath, sPath & "\")
    '*
    '* Find files
    sFileName = Dir(sPath & sFileSpec, vbNormal)
    If sFileName <> "" Then
        For Each oFile In oParentFolder.Files
            If LCase(oFile.name) Like LCase(sFileSpec) Then
                iCount = UBound(recFoundFiles)
                iCount = iCount + 1
                ReDim Preserve recFoundFiles(1 To iCount)
                file = sPath & oFile.name
                name = oFile.name
            End If
                On Error GoTo nextfile:
                Set wbResults = Workbooks.Open(Filename:=file, UpdateLinks:=0)


''insert your code here


               wbResults.Close SaveChanges:=False
nextfile:
        Next oFile
        Set oFile = Nothing         '* Although it is nothing
    End If
    If blIncludeSubFolders Then
        '*
        '* Select next sub-forbers
        For Each oFolder In oParentFolder.SubFolders
            FindFiles oFolder.path, recFoundFiles, iFilesFound, sFileSpec, blIncludeSubFolders
        Next
    End If
    FindFiles = UBound(recFoundFiles) > 0
    iFilesFound = UBound(recFoundFiles)
    On Error GoTo 0
    '*
    '* Clean-up
    Set oFolder = Nothing           '* Although it is nothing
    Set oParentFolder = Nothing
    Set oFileSystem = Nothing

End Function
Function SSCGetColumnCodeFromIndex(colIndex As Variant) As String
    Dim tstr As String
    Dim prefixInt As Integer
    Dim suffixInt As Integer
    prefixInt = Int(colIndex / 26)
    suffixInt = colIndex Mod 26
    If prefixInt = 0 Then
        tstr = ""
    Else
        prefixInt = prefixInt - 1
        tstr = Chr(65 + prefixInt)
    End If
    tstr = tstr + Chr(65 + suffixInt)
    SSCGetColumnCodeFromIndex = tstr
End Function
Function GetColNum(oSheet As Worksheet, name As String)
Dim Endrow_Col, i
'For loop to get the column number of name
Endrow_Col = oSheet.Range("A1").End(xlToRight).Column
oSheet.Select
oSheet.Range("A1").Select
For i = 0 To Endrow_Col - 1 Step 1
If ActiveCell.Value <> name Then
    ActiveCell.Offset(0, 1).Select
ElseIf ActiveCell.Value = name Then
    GetColNum = ActiveCell.Column
    Exit For
    End If
Next i
End Function
Function ShDel(name As String)

End If
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM