我可以全局使用Set命令吗?

时间:2015-08-17 17:00:18

标签: vba excel-vba excel

我有几个使用

的潜艇
Dim wb1 As Workbook

Set s1 = wb1.Worksheets("Sheet1")

我希望将所有Dim语句移到一个新模块中并使它们成为全局模式(或者更好地将它们公布在它们当前包含在模块顶部的位置?)。

有没有办法对Set语句执行此操作,因此我不需要在每个子语句中使用相同的行?

1 个答案:

答案 0 :(得分:1)

在通用代码模块(insert->module)中输入以下内容:

Public wb1 As Workbook
Public s1 As Worksheet
Public s2 As Worksheet 'etc.
Public Initialized As Boolean

Sub Initialize()
    Set wb1 = ActiveWorkbook
    Set s1 = wb1.Sheets(1)
    Set s2 = wb1.Sheets(2)
    Initialized = True
End Sub

然后在ThisWorkbook代码模块中,有:

Private Sub Workbook_Open()
    Initialize
End Sub

然后(主要是作为一种安全措施,以防万一(例如运行时错误)重置项目)包括行

If Not Initialized Then Initialize

位于需要访问这些变量的每个子组的顶部。

说了这么多 - 大量使用全局变量被认为是糟糕的设计。另一方面 - 如果它们是您在整个项目中使用的变量,并且它们永远不会更改它们的引用,那么这样的事情可能会减少代码混乱。