2015-06-28 25 views
1

我的VBA程序代碼訪問每個子文件夾內的文件。所以我將這些子文件夾的名稱存儲在一個數組中,並使用for循環訪問。我想讓我的程序更通用。我們如何才能將子文件夾的名稱作爲字符串數組傳遞給變量?如果你知道任何功能,請幫助我。提前致謝。Excel VBA:以字符串數組獲取子文件夾的名稱

我的代碼

Sub CSVtoXLSX_Click() 
Dim CSVfolder As String, XlsFolder As String, fname As String 
Dim wBook As Workbook 
Dim vArr, vFile 
vArr = Array("subfolder1", "subfolder2", "subfolder3", "subfolder4", "subfolder5") 
CSVfolder = "C:\Work\" 
XlsFolder = "C:\Work\" 
For Each vFile In vArr 
fname = Dir(CSVfolder & vFile & "\" & "*.csv") 
Do While fname <> "" 
    Application.ScreenUpdating = False 
    Set wBook = Workbooks.Open(CSVfolder & vFile & "\" & fname, Format:=6, Delimiter:=",") 
    wBook.SaveAs XlsFolder & vFile & "\" & Replace(fname, ".csv", ""), xlOpenXMLWorkbook 
    Application.CutCopyMode = False 
    wBook.Close False 
fname = Dir() 
Loop 
Kill CSVfolder & vFile & "\" & "*.csv" 
Next 
End Sub 

回答

2

試試這個:

Sub CSVtoXLSX_Click() 
Dim CSVfolder As String, XlsFolder As String, fname As String 
Dim wBook As Workbook 
Dim colSF As Collection, vFile 
Dim bHadFiles As Boolean 

CSVfolder = "C:\Work\" 
XlsFolder = "C:\Work\" 

Set colSF = GetSubFolders(CSVfolder) 
For Each vFile In colSF 
    fname = Dir(CSVfolder & vFile & "\" & "*.csv") 
    bHadFiles = False 
    Do While fname <> "" 
     bHadFiles = True '<< at least one file to delete using Kill... 
     Application.ScreenUpdating = False 
     Set wBook = Workbooks.Open(CSVfolder & vFile & "\" & fname, _ 
            Format:=6, Delimiter:=",") 

     wBook.SaveAs XlsFolder & vFile & "\" & Replace(fname, ".csv", ""), _ 
         xlOpenXMLWorkbook 

     Application.CutCopyMode = False 
     wBook.Close False 
     fname = Dir() 
    Loop 
    If bHadFiles Then Kill CSVfolder & vFile & "\" & "*.csv" '<< will error if nothing to delete 
Next 
End Sub 


'get all subfolders under the provided path 
' return as a Collection 
Function GetSubFolders(sPath As String) As Collection 

    Dim col As New Collection, f 

    f = Dir(sPath, vbDirectory + vbNormal) 
    Do While f <> "" 
     If GetAttr(sPath & f) And vbDirectory Then 
      If f <> "." And f <> ".." Then col.Add f 
     End If 
     f = Dir() 
    Loop 
    Set GetSubFolders = col 

End Function 
+0

華!它的工作原理:) –

+0

你沒有使用FileSystemObject的任何特定原因? – RubberDuck

+0

我會用它:) –

相關問題