PAYATHON 2026

VBA 宏如何选择文件夹并打开其中的 CSV?

数据小许

结论

在 Import_Global_AB 中调用 ChooseFolder(),将返回的文件夹路径与 Global_AB.csv 拼接成完整路径,再传给 Workbooks.Open。如果用户取消选择,函数会返回空字符串,子程序应随即退出。

原函数中的 strPath 未定义。如果不需要指定初始目录,可以删除 .InitialFileName = strPath。CSV 通常只有一个工作表,使用 Worksheets(1) 可以避免依赖工作表名称。

参考实现

Option Explicit

Function ChooseFolder() As String
    Dim fldr As FileDialog

    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False

        If .Show = -1 Then
            ChooseFolder = .SelectedItems(1)
        End If
    End With

    Set fldr = Nothing
End Function

Sub Import_Global_AB()
    Dim folderPath As String
    Dim filePath As String
    Dim src As Workbook
    Dim srcSheet As Worksheet

    folderPath = ChooseFolder()
    If Len(folderPath) = 0 Then Exit Sub

    filePath = folderPath & Application.PathSeparator & "Global_AB.csv"
    If Len(Dir(filePath)) = 0 Then
        MsgBox "所选文件夹中找不到 Global_AB.csv。", vbExclamation
        Exit Sub
    End If

    On Error GoTo ImportError

    Set src = Workbooks.Open(Filename:=filePath, ReadOnly:=True)
    Set srcSheet = src.Worksheets(1)

    With ThisWorkbook.Worksheets("GLOBAL")
        .Range("A2:A101").Value = srcSheet.Range("E2:E101").Value
        .Range("B2:B101").Value = srcSheet.Range("C2:C101").Value
        .Range("C2:C101").Value = srcSheet.Range("J2:J101").Value
        .Range("D2:D101").Value = srcSheet.Range("G2:G101").Value
        .Range("E2:E101").Value = srcSheet.Range("D2:D101").Value
    End With

    src.Close SaveChanges:=False
    MsgBox "Import Complete"
    Exit Sub

ImportError:
    If Not src Is Nothing Then src.Close SaveChanges:=False
    MsgBox "导入失败:" & Err.Description, vbExclamation
End Sub

关键点

  1. 用户确认选择后,ChooseFolder() 返回目录路径;取消对话框时,函数返回空字符串。Len(folderPath) = 0 可用于识别取消操作。
  2. Application.PathSeparator 会根据当前环境提供路径分隔符,可用于连接文件夹路径和文件名。
  3. Dir(filePath) 用于检查目标 CSV 是否存在。找不到文件时,代码会提示用户并退出。
  4. 代码通过 .Value 将 CSV 中的数据写入 GLOBAL 工作表。CSV 是文本数据文件;如果源文件是需要保留单元格公式的 Excel 工作簿,可按需改用 .Formula,并确认源工作表名称正确。
  5. 要让对话框从指定目录打开,可以将 .InitialFileName 设为已定义的路径,例如 .InitialFileName = "C:\\Data\\"。不要引用未声明的 strPath。

备注:内容仅供参考。