全球范围在vba-excel中丢失
Goal =创build一个variables,当我开始使用excel时,计算出所有其他模块全局可用的variables – 即给定工作表的大小。
在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
并使用这些variables中的任何一个,但他们似乎并没有在范围内。
ThisWorkbook
以及任何Worksheet
模块都是一个对象 – 类模块的一个实例 – 在这种情况下是Workbook
类的一个实例。
课堂单元中的Public
成员不是全球性的 ; 任何能够访问该类的实例的人都可以公开访问它们。
所以Public Foo As Long
在ThisWorkbook
声明为一个字段 ,可以通过以下方式访问:
Debug.Print ThisWorkbook.Foo
并分配所有相同的:
ThisWorkbook.Foo = 42
如果您希望variables可公开访问 ,但是只读 ,则必须将其封装 。 声明它Private
,并公开一个Property Get
访问器:
Private mFoo As Long Public Property Get Foo() As Long Foo = mFoo End Property
然后,您可以在ThisWorkbook
任何成员分配mFoo
,并且该项目的任何其他模块中的任何成员读取 Foo
。
如果你想要一个实际的全局variables (提示:你可能不需要 ),那么你需要在一个标准模块 (.bas)中声明它。