Excel VBA-如何创建TRUE全局变量

时间:2018-08-27 00:19:48

标签: excel excel-vba

我想做什么:

我想知道如何创建一个TRUE全局变量

到目前为止我发现的东西:

不幸的是,我已经阅读了数百篇有关在Excel中创建全局变量的文章,但这些文章都没有真正解决真正的问题。

我看到的所有示例都可以在单个工作表或仅在工作簿级别上正常工作,但没有一个是真正的“全局”,因为无法从项目/任何工作表/ VBA中访问/更改该变量。解决方案。

为使这个问题明确,我想创建一个变量,该变量可以是:

  1. 通过Open_Workbook过程在“工作簿”空间中设置为默认值,并且
  2. 从与当前工作簿的任何工作表关联的VBA过程中访问/更改。

也许我只是缺少一些明显的东西,但这是一个主要问题,似乎没有人能够简洁地回答。

1 个答案:

答案 0 :(得分:2)

只需使用自定义属性扩展ThisWorkbook即可,而不是使用全局变量:

'ThisWorkbook
Option Explicit

Private stored As Long

Public Property Get StoredValue() As Long
    StoredValue = stored
End Property

Public Property Let StoredValue(rhs As Long)
    stored = rhs
End Property

Private Sub Workbook_Open()
    stored = 42
End Sub

只要打开工作簿,它就会一直保持其状态,但有一个重要的警告-迫使工作簿类重新编译的任何操作都将重置其状态。 See this question了解更多信息。请注意,有一些解决方法,例如使用custom property代替后备字段的私有变量。用法与工作簿的任何其他属性一样,尽管您确实需要通过其代号来引用它:

'This code goes anywhere you want...
Public Sub Example()
    MsgBox ThisWorkbook.StoredValue
    ThisWorkbook.StoredValue = ThisWorkbook.StoredValue + 1
End Sub