运行宏时选中非目标表,能否移除VBA代码.Activate行避免错误1004?
可以移除
.Activate语句,且不会触发运行时错误1004! 当然没问题,不过得先修正原代码里的一个隐性问题——你原来的Range("P9").End(xlDown)没有指定所属工作表,它默认会指向当前活动工作表,这正是之前需要用.Activate来切换到目标工作表的原因。只要把所有Range对象都明确绑定到目标工作表,就完全不需要激活它,代码也更健壮。
修改后的代码(顺便修复了原代码的语法错误)
Sub PDFbyMarket() Dim wb1 As Workbook Dim ws As Worksheet Dim OBPBudgetByMarket As Range Set wb1 = Workbooks("PDF") ' 先把目标工作表赋值给一个变量,让代码更简洁易读 Set ws = wb1.Worksheets("OBP_Market_Structure") ' 所有Range都通过ws变量绑定,确保指向正确的工作表 Set OBPBudgetByMarket = ws.Range("P9", ws.Range("P9").End(xlDown)) End Sub
关键修改点:
- 新增了
ws变量来存储目标工作表,避免重复书写冗长的工作表引用 - 把原本无归属的
Range("P9").End(xlDown)改成ws.Range("P9").End(xlDown),强制让这个Range指向OBP_Market_Structure工作表,而不是当前活动表 - 移除了多余的
.Activate语句,代码执行效率也会更高(切换工作表是比较耗时的操作)
另外提一句:原代码最后一行的Range括号没有闭合,我也顺便修正了这个语法问题,不然原代码本身运行就会报错哦。
内容的提问来源于stack exchange,提问作者barciewicz
相关产品推荐
相关产品推荐

