gpt4 book ai didi

vba - 为什么 Excel VBA 中的其他模块无法识别我的全局变量?

转载 作者:行者123 更新时间:2023-12-04 21:02:21 26 4
gpt4 key购买 nike

这就是我在“ThisWorkbook”模块中的内容:

Option Explicit

Public wbReport As Workbook

Private Sub Workbook_Open()
Set wbReport = ActiveWorkbook
End Sub

我在与 cetain 工作表对应的模块中有以下宏,我希望它在某些单元格的值发生变化时激活:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

Set KeyCells = wbReport.Range("inspection_number")

etc.
.
.
.
End Sub

然而,当这个宏被激活时,我得到一个运行时错误“424”,就好像 wbReport 全局变量从未建立过一样。

有什么建议么?

最佳答案

wbReport必须作为对象可用。当你运行 Worksheet_Change() ,你有没有提前跑Set wbReport = ActiveWorkbook ?错误消息表明不是。 Locals 窗口也可用于查找:设置断点并查看 wbReport是一个对象。如果没有,想办法使是这样的。您也许可以使用 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

我认为您来自面向对象的背景,其中模块将包含其方法,并且某些方法将被隐式调用。 (我没有,所以我的描述性措辞可能不正确。)这使您的方法有点形式化。这通常会很好地为您服务;在这种情况下,也许是一个不必要的层。

关于vba - 为什么 Excel VBA 中的其他模块无法识别我的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33918436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com