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
相关产品推荐
相关产品推荐

