簡體   English   中英

為什么我的全局變量在Excel VBA的其他模塊中無法識別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM