Excel VBA - 通过连接名称调用全局变量

时间:2015-06-03 19:56:29

标签: excel vba global-variables

我有这些

Public Const WS1 = "SheetNameA"
Public Const WS2 = "SheetNameB"
Public Const WS3 = "SheetNameC"
Public Const WS4 = "SheetNameD"
Public Const WS5 = "SheetNameE"
Public Const WS6 = "SheetNameF"

SheetNameA-B-C是工作簿中工作表的名称。 我想使用For loop 1 to 6这样一个接一个地激活工作表:

For i = 1 to 6
    Workbooks([wbkname]).Sheets(WS & i).Activate
    [some more code doing stuff]
Next i

现在我知道这不起作用,我只想解释我想要的东西。 那可能吗?通过连接名称调用公共常量(使公共常量字符串成为我们激活的工作表的名称)?

我希望这是有道理的。

编辑:第二个想法,也许我会做一个Select Case,我知道这不是很漂亮,但我认为,对我的目的来说会很好。

For i = 1 to 6
    Select Case i
        Case 1
            somevariable = [name of one sheet]
        Case 2
            somevariable = [name of another sheet]
        ....
    End Select
    Workbooks([wbkname]).Sheets(somevariable).Activate

2 个答案:

答案 0 :(得分:0)

我不知道VBA中的“间接”功能,你可以做的是定义一个公共数组并在那里存储值,这里你可以通过索引获取值。由于无法在VBA中定义数组常量,因此需要在使用前初始化数组(例如,在工作簿的加载事件中)。

答案 1 :(得分:0)

只需使用数组。首先运行 MAIN(),然后运行 marine()

Public WS(1 To 6) As String

Sub MAIN()
   WS(1) = "SheetNameA"
   WS(2) = "SheetNameB"
   WS(3) = "SheetNameC"
   WS(4) = "SheetNameD"
   WS(5) = "SheetNameE"
   WS(6) = "SheetNameF"
End Sub

Sub marine()
   For i = 1 To 6
       Workbooks("Book1").Sheets(WS(i)).Activate
       [some more code doing stuff]
   Next i
End Sub