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

从CSV导入数据至XLSM时VBA宏报错:Runtime Error 1004

解决VBA导入CSV时的Runtime Error 1004问题

这个Runtime Error 1004: Method 'Range' of object '_Global' failed错误,大概率是因为你没有明确指定Range所属的工作表导致的——直接用Range("A1")会默认引用当前活动工作表,如果此时活动表不是你要写入数据的目标表,就会触发这个错误。另外你的代码逻辑也有可以优化的地方,咱们一步步来修正:

原代码的核心问题点

  • 未指定工作表:Range("A1")属于全局_Global对象,完全依赖当前活动工作表,稳定性极差
  • 冗余的判断逻辑:If IsEmpty(Range("A1")) = True之后又用Else: If IsEmpty(Range("A1")) = False,完全没必要,还容易打乱代码执行流程
  • 未完成的GoTo Lin...语句:标签缺失会直接导致代码执行异常

修正后的完整代码示例

Sub LoadFromFile()
    Dim fileName As String
    Dim folder As String
    Dim lastRow As Long
    Dim destSheet As Worksheet
    ' 明确指定目标工作表,把"数据导入表"改成你实际的工作表名称
    Set destSheet = ThisWorkbook.Sheets("数据导入表")
    
    ' 简化lastRow判断逻辑,更严谨
    With destSheet
        If IsEmpty(.Range("A1").Value) Then
            lastRow = 1
        Else
            ' 精准定位A列最后一行有数据的位置,避免漏判已有数据的情况
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        End If
    End With
    
    ' 获取当前XLSM文件所在目录
    folder = ThisWorkbook.Path
    ' 遍历目录下所有CSV文件
    fileName = Dir(folder & "\*.csv")
    
    Do While fileName <> ""
        ' 用QueryTable导入CSV数据,稳定可靠
        With destSheet.QueryTables.Add(Connection:="TEXT;" & folder & "\" & fileName, Destination:=destSheet.Range("A" & lastRow))
            .TextFileParseType = xlDelimited
            .TextFileCommaDelimiter = True ' 如果是其他分隔符(如分号),替换成对应属性
            .Refresh BackgroundQuery:=False
            .Delete ' 导入后删除临时QueryTable,避免重复创建
        End With
        
        ' 更新lastRow,准备导入下一个CSV
        lastRow = destSheet.Cells(destSheet.Rows.Count, "A").End(xlUp).Row + 1
        fileName = Dir() ' 获取下一个CSV文件
    Loop
End Sub

关键改进说明

  • 绑定目标工作表:用Set destSheet = ThisWorkbook.Sheets("数据导入表")固定操作的工作表,所有Range引用都加上.前缀(比如.Range("A1")),彻底摆脱对活动工作表的依赖
  • 优化行号判断:用Cells(Rows.Count, "A").End(xlUp).Row精准找到数据末尾,比只判断A1是否为空更适合已有数据的场景
  • 完善CSV导入流程:添加了完整的CSV遍历和导入逻辑,QueryTable是处理CSV导入的稳定方式,避免手动读取的各种坑

额外注意事项

  • 确保目标工作表名称完全正确,不要出现拼写错误
  • 如果你的CSV是分号、制表符等其他分隔符,把.TextFileCommaDelimiter = True改成对应的属性(比如.TextFileSemicolonDelimiter = True)
  • 运行宏前先保存XLSM文件,否则ThisWorkbook.Path会返回空值,导致找不到CSV文件

内容的提问来源于stack exchange,提问作者Rahilkhan Pathan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:48