2016-07-07 195 views
2

我試圖根據單元格中的值在VBA中創建動態數量的變量。 基本上我最終想要的就是Team1, Team2... to TeamX。 任何幫助非常感謝如何創建動態變量名稱VBA

Dim i, x As Integer 
Set x = Range("J4").Value 
Dim Team(1 To x) As String 
Dim Manager(1 To x) As String 
Range("A3").Select 
For i = 1 To x 
Dim Team(i) As Integer 
+1

你正在考慮的[陣列(https://msdn.microsoft.com/en-us/library/wak0wfyt.aspx) – litelite

+1

你熟悉字典嗎? – jellz77

+1

我對字典不熟悉;他們能幫助這種情況嗎? – reggie86

回答

10

字典可能會在這種情況下幫助,它是爲腳本設計的,雖然它w不要讓你創建「動態」變量,字典的項目是動態的,並且可以用作「變量」的類似目的。

Dim Teams as Object 
Set Teams = CreateObject("Scripting.Dictionary") 
For i = 1 To x 
    Teams(i) = "some value" 
Next 

後來,查詢值,只是在項目調用諸如:

MsgBox Teams(i) 

字典包含鍵/值對,鍵必須是唯一的。分配到現有將覆蓋它的值,例如:

Teams(3) = "Detroit" 
Teams(3) = "Chicago" 
Debug.Print Teams(3) '## This will print "Chicago" 

可以使用.Exist方法,如果你需要擔心覆蓋或不檢查存在。

If Not Teams.Exist(3) Then 
    Teams(3) = "blah" 
Else: 
    'Teams(3) already exists, so maybe we do something different here 

End If 

您可以使用.Count方法獲取詞典中的項目數。

MsgBox "There are " & Teams.Count & " Teams.", vbInfo 

甲字典的鍵必須是整數或字符串,但這些值可以是任何數據類型(包括數組,甚至Object數據類型,如CollectionWorksheetApplication,嵌套字典等,使用Set關鍵字),因此,例如,你可以快譯通工作表在工作簿:

Dim ws as Worksheet, dict as Object 
Set dict = CreateObject("Scripting.Dictionary") 
For each ws in ActiveWorkbook.Worksheets 
    Set dict(ws.Name) = ws 
Next