2015-06-03 80 views
0

調用全局變量我有這些Excel的VBA - 通過級聯名

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 

回答

0

我不知道在VBA「間接」的功能,你可以做的是定義一個公共陣列和存儲的值出現,在這裏你可以通過索引獲取值。由於無法在VBA中定義數組常量,因此需要在使用前初始化數組(例如,在工作簿的加載事件中)。

0

只需使用一個數組。首先運行MAIN(),然後運行海洋()

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 
+0

這是一個絕對偉大的建議 - 這可能不適合我的工作,雖然。在我的情況下,讓我們說在一本工作簿中,我有一些工作表,例如:「人物」,「動物」,「植物」,而在其他工作簿中,我將有多個相關工作表其中的每一個,比如「數據 - 人物」,「材料 - 人物」,「無論 - 人物」,我甚至想要在混合中添加前綴,在一個wbk中激活「People」,然後選擇「Data - People」在另一個。 – metrazol

+0

@metrazol你可以使任何你選擇的數組元素。 –