You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个CSV文件导入运行宏的Excel工作簿

修改VBA代码:将CSV文件导入当前工作簿并以文件名命名工作表

以下是修改后的完整代码,解决了原代码新建工作簿的问题,同时实现了用CSV文件名作为工作表名称的需求,还增加了重名处理避免报错:

Sub ImportCsvToCurrentWorkbook()
    Dim xFilesToOpen As Variant
    Dim I As Integer
    Dim xTempWb As Workbook
    Dim xTargetWb As Workbook
    Dim xSheetName As String
    Dim xScreen As Boolean
    
    On Error GoTo ErrHandler
    xScreen = Application.ScreenUpdating
    Application.ScreenUpdating = False
    
    ' 目标工作簿设为当前运行宏的工作簿
    Set xTargetWb = ThisWorkbook
    
    ' 弹出选择窗口,允许多选CSV文件
    xFilesToOpen = Application.GetOpenFilename("CSV文件 (*.csv), *.csv", , "选择CSV文件", , True)
    If TypeName(xFilesToOpen) = "Boolean" Then
        MsgBox "未选择任何文件", vbExclamation, "提示"
        GoTo ExitHandler
    End If
    
    ' 逐个处理选中的CSV文件
    For I = LBound(xFilesToOpen) To UBound(xFilesToOpen)
        Set xTempWb = Workbooks.Open(xFilesToOpen(I))
        
        ' 提取文件名(去掉.csv后缀)
        xSheetName = Left(xTempWb.Name, Len(xTempWb.Name) - 4)
        
        ' 检查工作表名称是否重复,重复则加序号区分
        Dim counter As Integer
        counter = 1
        Do While SheetExists(xSheetName, xTargetWb)
            xSheetName = Left(xTempWb.Name, Len(xTempWb.Name) - 4) & "_" & counter
            counter = counter + 1
        Loop
        
        ' 将CSV工作表复制到当前工作簿的最后
        xTempWb.Sheets(1).Copy After:=xTargetWb.Sheets(xTargetWb.Sheets.Count)
        ' 给新工作表命名
        xTargetWb.Sheets(xTargetWb.Sheets.Count).Name = xSheetName
        
        ' 关闭临时打开的CSV文件,不保存
        xTempWb.Close SaveChanges:=False
    Next I
    
    MsgBox "所有CSV文件已成功导入!", vbInformation, "完成"
    
ExitHandler:
    Application.ScreenUpdating = xScreen
    Set xTargetWb = Nothing
    Set xTempWb = Nothing
    Exit Sub
    
ErrHandler:
    MsgBox "错误信息:" & Err.Description, vbCritical, "出错了"
    Resume ExitHandler
End Sub

' 辅助函数:检查指定工作簿中是否存在某工作表
Function SheetExists(sheetName As String, wb As Workbook) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = wb.Sheets(sheetName)
    On Error GoTo 0
    SheetExists = Not ws Is Nothing
End Function

关键修改说明

  1. 锁定目标工作簿:用ThisWorkbook直接指向运行宏的当前文件,彻底避免新建额外工作簿。
  2. 文件名处理:自动提取CSV文件名(去除.csv后缀)作为工作表名称,同时加入重名检查,重复时自动添加序号(比如数据.csv重复后会变成数据_1)。
  3. 循环逻辑优化:改用For...Next遍历选中的文件,比原代码的Do While更直观,新手更容易理解。
  4. 用户体验优化:添加导入完成提示,错误提示更明确,操作流程更顺畅。

使用步骤

  1. 打开你要导入CSV的Excel文件,按Alt+F11打开VBA编辑器。
  2. 右键点击左侧工程窗口的当前工作簿,选择「插入」→「模块」。
  3. 将上述代码粘贴到模块中,按F5运行ImportCsvToCurrentWorkbook宏,或者回到Excel界面通过「开发工具」→「宏」选择运行。
  4. 在弹出的窗口中选择要导入的CSV文件(可多选),确认后等待导入完成即可。

内容的提问来源于stack exchange,提问作者Thomas Stanley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:17:12