VBA代码运行时错误1004求助:取消筛选后清除复制数据异常
解决VBA Run-time error 1004:清除指定工作表区域内容失败
错误原因
出错行的核心问题是未明确指定Range所属的工作表:
Sheets("Applicazioni").Range(Range("A9"), Range("B9").End(xlDown)).ClearContents
这里的Range("A9")和Range("B9")没有绑定到Sheets("Applicazioni"),VBA会默认使用当前激活的工作表。如果此时激活的不是目标工作表,就会因引用无效区域触发1004错误。
修正后的代码
通过明确绑定工作表对象,同时优化代码结构避免激活操作,解决错误并提升代码稳定性:
Sub AggiornaApp() Dim wsApp As Worksheet Dim wsBase As Worksheet ' 定义工作表对象,简化后续引用 Set wsApp = ThisWorkbook.Sheets("Applicazioni") Set wsBase = ThisWorkbook.Sheets("Base Applicazioni") ' 取消Applicazioni表的筛选 If wsApp.AutoFilterMode Then wsApp.AutoFilter.ShowAllData End If ' 清除指定区域内容(所有Range均明确归属wsApp) With wsApp .Range(.Range("A9"), .Range("B9").End(xlDown)).ClearContents End With ' 取消Base Applicazioni表的筛选 If wsBase.AutoFilterMode Then wsBase.AutoFilter.ShowAllData End If ' 复制A列数据到目标表,无需激活工作表 wsBase.Range(wsBase.Range("A6"), wsBase.Range("A6").End(xlDown)).Copy _ Destination:=wsApp.Range("A9") ' 复制B列数据到目标表 wsBase.Range(wsBase.Range("B6"), wsBase.Range("B6").End(xlDown)).Copy _ Destination:=wsApp.Range("B9") End Sub
额外优化建议
如果B9下方没有数据,End(xlDown)会跳到工作表最后一行,导致清除大量空白区域。可以改为判断实际有数据的最后一行:
With wsApp Dim lastRow As Long ' 获取B列最后一个有数据的行号 lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row ' 仅当最后一行≥9时执行清除操作 If lastRow >= 9 Then .Range("A9:B" & lastRow).ClearContents End If End With
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

