为什么我的全局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化。 这将一般地为您服务; 在这种情况下,也许是一个不必要的层。