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

VBA复制Sheet1数据至Sheet2时遇Run-time error '1004'问题求助

问题排查与修复方案

核心错误点

  • 拼写错误:代码里的x1Down是数字1,正确的VBA常量是xlDown(字母l),这个低级错误直接触发了1004运行时错误。
  • 不稳定的选中操作:依赖Select和ActiveCell的写法很容易出问题——只要工作表选中状态被意外改变,代码就会找不到目标单元格。
  • 逻辑漏洞:原判断逻辑里,当Sheet2的B3下方有内容时,End(xlDown)会跳到最后一个非空单元格,但如果B列中间有空白行,会提前终止;要是B列已经填满到工作表最后一行,Offset(1,0)会直接超出范围报错。

修复后的代码

Private Sub Add_Click()
    Dim InspectionDate As String, InspectionName As String
    Dim wsInput As Worksheet, wsLog As Worksheet
    Dim lastRow As Long
    
    ' 直接绑定工作表,不用反复切换选中
    Set wsInput = ThisWorkbook.Worksheets("Sheet1")
    Set wsLog = ThisWorkbook.Worksheets("Sheet2")
    
    ' 读取输入数据
    InspectionDate = wsInput.Range("B4").Value
    InspectionName = wsInput.Range("B5").Value
    
    ' 精准找到B列最后一个非空行的下一行
    lastRow = wsLog.Cells(wsLog.Rows.Count, "B").End(xlUp).Row + 1
    
    ' 直接写入数据,不用选中单元格
    wsLog.Cells(lastRow, "B").Value = InspectionDate
    wsLog.Cells(lastRow, "C").Value = InspectionName
    
    ' 清空输入框
    wsInput.Range("B4:B5").ClearContents
End Sub

优化说明

  • 用工作表对象变量替代Select操作,彻底避免选中状态干扰带来的错误。
  • 用Rows.Count + End(xlUp)的方式找最后一行,不管B列有没有空白行,都能准确找到下一个写入位置。
  • 移除所有冗余的选中操作,代码运行更稳定、速度更快。

内容的提问来源于stack exchange,提问作者James C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:27:27