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

使用VBA跨工作表复制数据留存日志触发1004运行错误求解

错误原因

你的代码触发1004错误主要有3个问题:

  • 跨表引用未限定工作表:With Sheets("Total") 代码块内的 Range("B2") 前缺少点.前缀,默认引用当前激活的工作表而非Total工作表,跨表操作时会出现范围归属冲突。
  • 粘贴逻辑不符合需求:原代码写死Offset(0, 2)偏移2列,无法实现「始终粘贴到最后一个已填充列右侧」的日志留存逻辑,且手动构造粘贴范围很容易出现复制/粘贴区域尺寸不匹配的问题。
  • 复制区域判断不稳定:Range("E5").End(xlDown).End(xlToRight) 的写法在E列存在空单元格时会提前终止判断,无法准确选中你需要的E5:F18数据范围。
修正后可直接运行的代码
Sub CopyPaste()
    Dim pasteTargetCol As Long
    ' 关闭屏幕更新减少卡顿
    Application.ScreenUpdating = False
    
    ' 复制Input表E5:F18的源数据
    Sheets("Input").Range("E5:F18").Copy
    
    With Sheets("Total")
        ' 定位第2行最右侧已填充单元格,右移1列得到粘贴起始列
        pasteTargetCol = .Cells(2, .Columns.Count).End(xlToLeft).Column + 1
        ' 仅指定粘贴区域左上角单元格即可,自动适配复制区域尺寸
        .Cells(2, pasteTargetCol).PasteSpecial Paste:=xlValues
    End With
    
    ' 清空剪贴板释放内存
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
可选调整说明
  • 如果后续Input表的数据行数会动态增减,不需要固定为18行,可以把复制代码替换为动态判断写法,自动识别E列从第5行开始的所有连续数据:
With Sheets("Input")
    .Range("E5:F" & .Range("E" & .Rows.Count).End(xlUp).Row).Copy
End With
  • 如果你的日志数据不是从第2行开始粘贴,只需要把代码里两处2(Cells(2, ...)里的行号)改成你需要的起始行号即可。

内容的提问来源于stack exchange,提问作者Carolina Neves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:36:26