为什么不是';Excel VBA中的其他模块是否识别了我的全局变量?
这是我在“ThisWorkbook”模块中的内容: 我在与cetain工作表对应的模块中有以下宏,我希望在某些单元格的值更改时激活它:为什么不是';Excel VBA中的其他模块是否识别了我的全局变量?,vba,excel,Vba,Excel,这是我在“ThisWorkbook”模块中的内容: 我在与cetain工作表对应的模块中有以下宏,我希望在某些单元格的值更改时激活它: Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = wbReport.Range("inspection_number") etc. . . . End Sub 但是,当激活此
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = wbReport.Range("inspection_number")
etc.
.
.
.
End Sub
但是,当激活此宏时,会出现运行时错误“424”,就好像从未建立wbReport全局变量一样
任何建议?
wbReport
必须作为对象提供。运行工作表\u Change()
时,是否事先运行了设置wbReport=ActiveWorkbook
?错误消息表明没有。“局部变量”窗口也可用于查找:设置断点并查看wbReport
是否为对象。如果没有,找到一种方法使之成为现实。您可以使用Workbook\u Open()
来执行此操作,但必须将其设置为public
而不是private
Private Sub Worksheet_Change(ByVal Target As Range)
Call Workbook_Open()
'' the Call keyword is optional, I find it adds clarity.
Dim KeyCells As Range
Set KeyCells = wbReport.Range("inspection_number")
etc.
与其调用该函数,不如简单地使用它的一行代码:
Set wbReport = ActiveWorkbook
我认为您来自一个面向对象的背景,其中模块将包含其方法,有些方法将被隐式调用。(我不知道,所以我的描述可能不正确。)这使得你的方法有点形式主义。一般来说,这将很好地为您服务;在这种情况下,可能是一个不必要的层。我已尝试将“工作簿_Open()”更改为“Public”,但仍然遇到相同的错误。正如您所看到的,在“工作簿_Open”中,我已经设置了“Set wbReport=ActiveWorkbook”,因此我希望这足以将其建立为一个对象,您必须调用
Workbook_Open()
。请参阅编辑后的答案。wbReport
不仅仅是一个简单的变量,它还是这个工作簿的成员。因此需要使用类的名称引用此变量,如ThisWorkbook.wbReport
。由于wbReport
是工作簿,因此有必要说明范围位于哪个工作表上,例如ThisWorkbook.wbReport.ActiveSheet.range(“检查编号”)
。还要记住,工作簿
对象没有属于工作表
或应用程序的范围
属性。别忘了使用选项Explicit
,它有助于捕获大量错误。另一个问题与你的几乎相同。嗯
Set wbReport = ActiveWorkbook