如何创建动态变量名VBA

reg*_*e86 4 excel vba excel-vba

我试图根据单元格中的值在VBA中创建动态数量的变量.基本上我最想得到的就像是Team1, Team2... to TeamX.任何帮助是极大的赞赏

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
Run Code Online (Sandbox Code Playgroud)

Dav*_*ens 15

在这种情况下,字典可能会有所帮助,它是专为脚本编写的,虽然它不会让你创建"动态"变量,但字典的项目是动态的,并且可以用作与"变量"类似的用途.

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

稍后,要查询值,只需调用项目,如:

MsgBox Teams(i)
Run Code Online (Sandbox Code Playgroud)

字典包含键/值对,键必须是唯一的.分配给现有密钥将覆盖其值,例如:

Teams(3) = "Detroit"
Teams(3) = "Chicago"
Debug.Print Teams(3)  '## This will print "Chicago"
Run Code Online (Sandbox Code Playgroud)

.Exist如果您需要担心是否覆盖,可以使用该方法检查是否存在.

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

End If
Run Code Online (Sandbox Code Playgroud)

您可以使用该.Count方法获取字典中的项目数.

MsgBox "There are " & Teams.Count & " Teams.", vbInfo
Run Code Online (Sandbox Code Playgroud)

字典的键必须是整数或字符串,但这些值可以是任何数据类型(包括数组,甚至Object数据类型,如Collection,Worksheet,Application,嵌套字典等,使用Set关键字),因此例如,你可以DICT在工作表工作簿:

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