![](/img/trans.png)
[英]Excel VBA - Why doesn't sheet code recognize my global range variable defined in a module?
[英]Why isn't my global variable recognised in other modules in Excel VBA?
這是“ ThisWorkbook”模塊中的內容:
Option Explicit
Public wbReport As Workbook
Private Sub Workbook_Open()
Set wbReport = ActiveWorkbook
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
必須作為對象可用。 當您運行Worksheet_Change()
,您是否事先運行過Set wbReport = ActiveWorkbook
? 錯誤消息指示不。 “本地”窗口也有助於查找:設置斷點,並查看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.
simper不用調用該函數,而只使用其一行代碼:
Set wbReport = ActiveWorkbook
我認為您來自面向對象的背景,其中模塊將包含其方法,而某些模塊將被隱式調用。 (我沒有,所以我的描述性措辭可能是錯誤的。)這使您的方法有點形式化。 一般而言,這將為您服務; 在這種情況下,可能是不必要的層。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.