簡體   English   中英

VBA-Excel中丟失了全局范圍

[英]Global scope lost in vba-excel

目標=創建一個變量,該變量在我啟動excel時進行計算,並且該變量可全局用於所有其他模塊-即給定工作表的大小。

在ThisWorkbook中,我在聲明部分中有此內容。 我認為這些對其他模塊都是可見的/持久的。 當我啟動excel時,實際上確實得到了預期的調用。

Public BillingMaxRows As Integer
Public BillingMaxColumns As Integer
Public MonthlyMaxRows As Integer
Public MonthlyMaxColumns As Integer

然后在聲明部分之外。

 Sub Workbook_Open()
    BillingMaxRows = Sheets("billing").UsedRange.Rows.Count
    BillingMaxColumns = Sheets("billing").UsedRange.Columns.Count
    MonthlyMaxRows = Sheets("Monthly Billings").UsedRange.Rows.Count
    MonthlyMaxColumns = Sheets("Monthly Billings").UsedRange.Columns.Count
    MsgBox (BillingMaxRows)    
End Sub

然后在通用模塊中,我嘗試enter code here並使用這些變量中的任何一個,但它們似乎不在范圍內。

ThisWorkbook以及任何Worksheet模塊都是一個對象 - 類模塊的實例-在這種情況下是Workbook類的實例。

課堂模塊中的Public成員不是全球性的 ; 能夠訪問該類實例的任何人都可以公開訪問它們。

因此,可以通過以下方式訪問Public Foo As Long聲明為ThisWorkbook字段

Debug.Print ThisWorkbook.Foo

並分配所有相同的內容:

ThisWorkbook.Foo = 42

如果您希望變量是可公開訪問的 ,但是只讀的 ,則必須對其進行封裝 將其聲明為Private ,並為其公開Property Get訪問器:

Private mFoo As Long

Public Property Get Foo() As Long
    Foo = mFoo
End Property

然后,您可以讓ThisWorkbook任何成員分配mFoo ,並且項目其他模塊中的任何成員都讀取 Foo


如果要使用實際的全局變量 (提示:可能不需要 ),則需要在標准模塊 (.bas)中聲明它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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