【问题标题】:Excel VBA: Getting subfolders' names as array of stringsExcel VBA:将子文件夹的名称作为字符串数组获取
【发布时间】:2015-06-28 08:52:01
【问题描述】:

我的 VBA 程序代码访问每个子文件夹中的文件。所以我将这些子文件夹的名称存储在一个数组中并使用 for 循环进行访问。我想让我的程序更通用。我们如何将子文件夹的名称作为字符串数组获取到变量?如果您知道任何功能,请帮助我。提前致谢。

我的代码

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试这个:

    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
    

    【讨论】:

    • 您没有使用 FileSystemObject 的任何特殊原因?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2016-09-11
    • 2011-12-17
    • 1970-01-01
    • 2016-10-01
    相关资源
    最近更新 更多