2016-07-07 196 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