为什么我的全局variables在Excel VBA的其他模块中不被识别?
这是我在“ThisWorkbook”模块中的内容:
Option Explicit Public wbReport As Workbook Private Sub Workbook_Open() Set wbReport = ActiveWorkbook End Sub
我有一个cetain工作表对应的模块中的以下macros,我希望它激活时,某些单元格的值更改:
Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = wbReport.Range("inspection_number") etc. . . . End Sub
但是,当这个macros被激活时,我得到一个运行时错误'424',好像wbReport全局variables从未build立过一样。
有什么build议么?
wbReport
必须作为一个对象可用。 当你运行Worksheet_Change()
,你有没有预先运行Set wbReport = ActiveWorkbook
? 错误消息指示不。 本地窗口也是有用的发现:设置一个断点,看看是否一个对象的wbReport
。 如果没有,find一个办法是这样的。 您可以使用Workbook_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
我觉得你来自一个面向对象的背景,其中模块将包含其方法,一些将被隐式调用。 (我不这样做,所以我的描述性措辞可能是不正确的。)这使得你的方法有点forms化。 这将一般地为您服务; 在这种情况下,也许是一个不必要的层。