Excel VBA:以string数组forms获取子文件夹的名称

我的VBA程序代码访问每个子文件夹内的文件。 所以我将这些子文件夹的名称存储在一个数组中,并使用for循环来访问。 我想让我的程序更通用。 我们如何才能将子文件夹的名称作为一个string数组到一个variables? 如果你知道任何function,请帮助我。 提前致谢。

我的代码

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 

尝试这个:

 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