打开错误的Excel选项卡时执行VBA代码时出错

打开错误的Excel选项卡时执行VBA代码时出错,vba,Vba,我的VBA代码使用两个Excel电子表格。它从一个选项卡(Tab1)获取数据,并将结果写入另一个选项卡(Tab2)。然而,当我在Tab2打开时启动代码时,VBA给了我“应用程序定义或对象定义错误”。当我在Tab1上时,代码工作。下面是它阻塞的代码行: Set YE_last = Forecast.Range(Cells(YE_forecast.Row + 1, YE_forecast.Column + i - 1), Cells(YE_forecast.Row + 1, YE_forecast.

我的VBA代码使用两个Excel电子表格。它从一个选项卡(Tab1)获取数据,并将结果写入另一个选项卡(Tab2)。然而,当我在Tab2打开时启动代码时,VBA给了我“应用程序定义或对象定义错误”。当我在Tab1上时,代码工作。下面是它阻塞的代码行:

Set YE_last = Forecast.Range(Cells(YE_forecast.Row + 1, YE_forecast.Column + i - 1), Cells(YE_forecast.Row + 1, YE_forecast.Column + i - 1))

你能帮忙吗

单元格
不带工作表对象限定符,隐式引用
活动表
是什么(如果您在标准代码模块中)。如果您在工作表的代码隐藏模块中,则非限定的
单元格
调用基本上是执行
Me.Cells
,即它们引用的是该工作表

解决方案是使用正在使用的图纸对象限定所有内容:

Set YE_last = Forecast.Range(Forecast.Cells(YE_forecast.Row + 1, YE_forecast.Column + i - 1), Forecast.Cells(YE_forecast.Row + 1, YE_forecast.Column + i - 1))
带有块的
可以简化此过程:

With Forecast
    Set YE_last = .Range(.Cells(YE_forecast.Row + 1, YE_forecast.Column + i - 1), .Cells(YE_forecast.Row + 1, YE_forecast.Column + i - 1))
End With

非限定的
单元格
调用隐式引用
活动表
;如果
ActiveSheet
不是
Forecast
工作表,则会发生爆炸。检查人员会告诉您(免责声明:我管理开源VBIDE加载项项目);-)