全球范围在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 LongThisWorkbook声明为一个字段 ,可以通过以下方式访问:

 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)中声明它。