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

VBA批量合并多文件数据遇‘Object required’错误求助

VBA代码错误修复与优化

错误原因分析

你遇到的「Object required」错误,是因为lastrow是数值型变量(Long),但你用了仅适用于对象变量的Set关键字赋值,直接去掉Set即可。

除此之外,代码还有多处语法逻辑问题,以下是完整修正版代码及问题说明:

修正后的完整代码

Sub Compile()
    Dim I As Long
    Dim WB_Target As Workbook, WB_Source As Workbook ' 明确声明每个变量类型
    Dim WS_Files As Worksheet, WS_Target As Worksheet
    Dim lastrow As Long
    Dim sourcePath As String
    
    ' 关闭屏幕刷新和提示,提升运行效率
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set WB_Target = ThisWorkbook
    Set WS_Files = WB_Target.Sheets("FilePaths") ' 存储源文件路径的工作表
    Set WS_Target = WB_Target.Sheets("TargetSheet") ' 目标汇总工作表
    
    ' 遍历H列的所有文件路径
    For I = 1 To WS_Files.Range("H1").End(xlDown).Row
        sourcePath = WS_Files.Range("H" & I).Value
        ' 检查文件是否存在
        If Len(Dir(sourcePath)) > 0 Then
            Set WB_Source = Workbooks.Open(sourcePath)
            With WB_Source.Sheets("Account")
                ' 复制Account表中A1到M列的有效数据(若源表带表头,可改为从A2开始复制)
                .Range("A1:M" & .Range("A1").End(xlDown).Row).Copy
            End With
            
            ' 计算目标表的最后一行(从A列向上查找有效数据行)
            lastrow = WS_Target.Cells(WS_Target.Rows.Count, "A").End(xlUp).Row + 1
            ' 确保数据从A5开始粘贴,即使目标表只有表头
            If lastrow < 5 Then lastrow = 5
            
            WS_Target.Range("A" & lastrow).PasteSpecial xlPasteValuesAndNumberFormats ' 避免格式干扰,建议用指定粘贴方式
            Application.CutCopyMode = False
            
            WB_Source.Close SaveChanges:=False ' 直接用对象变量关闭,避免名称匹配错误
        End If
    Next I
    
    ' 恢复屏幕刷新和系统提示
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

关键问题修正说明

  1. 变量声明规范:原代码Dim WB_Target, WB_Source As Workbook仅将WB_Source声明为Workbook类型,WB_Target默认是Variant类型,修正为每个变量明确指定类型。
  2. Set关键字误用:移除lastrow赋值前的Set,Long是数值类型,无需用Set赋值。
  3. 工作表引用错误:原代码Sheets("Full")应为目标工作表WS_Target,且Cells(Rows.Count, "A4")语法错误,列参数需用列字母(如"A")或列号(如1),不能是单元格地址。
  4. 文件路径引用错误:原代码WS_Files.Range("H") & i应为WS_Files.Range("H" & I).Value,且Dir(path.Range(...))中的path应为WS_Files。
  5. 循环结构错误:原代码Else块后的Next位置错误,应放在If块结束后。
  6. 工作簿关闭方式:原代码Workbooks("WB_Source").Close逻辑错误,直接使用对象变量WB_Source.Close更可靠。
  7. 粘贴优化:改用PasteSpecial指定粘贴内容(如值和数字格式),避免不必要的格式干扰。
  8. 起始行保障:增加If lastrow <5 Then lastrow=5,确保数据从A5开始粘贴,即使目标表只有表头。

内容的提问来源于stack exchange,提问作者Claire Melinda Dunphy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:02:50