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