请以下一种方式调整您的代码。你可以给字典一个Name(实际上是一个Collectionkey)添加到Collection时:
Sub testDictNameInCollection()
Dim Cows As Object, Dogs As Object, Goats As Object
Dim TotalAnimals As New Collection, i As Long, arrK
Set Cows = CreateObject("scripting.dictionary")
Set Dogs = CreateObject("scripting.dictionary")
Set Goats = CreateObject("scripting.dictionary")
'load here the dictionaries...
TotalAnimals.Add Cows, "Cows"
TotalAnimals.Add Dogs, "Dogs"
TotalAnimals.Add Goats, "Goats"
arrK = Array("Cows", "Dogs", "Goats")
For i = 0 To UBound(arrK)
Debug.Print TotalAnimals.item(arrK(i)).count
Next i
TotalAnimals.item("Cows").Add "Cow 1 ", "a lot of milk"
Debug.Print TotalAnimals("Cows").Items()(TotalAnimals("Cows").count - 1) 'last item of the "Cow" dictionary
End Sub
由于Scripting.Dictionary 不公开Name 属性,您可以使用能够包装名称的类,以便使用对象和其名称:
- 复制一个类中的下一个代码并将其命名为“AnimalClass”:
Option Explicit
Private dictName As String
Private dict As Object
Private Sub Class_Initialize()
Set dict = CreateObject("Scripting.Dictionary")
End Sub
Public Property Get Name() As String
Name = dictName
End Property
Public Property Let obj(dic As Object)
Set dict = dic
End Property
Public Property Let Name(strName As String)
dictName = strName
End Property
Public Property Get obj() As Object
Set obj = dict
End Property
- 在标准模块中复制下一个代码:
Sub testDictionaryName()
Dim Cows As Object, Dogs As Object, Goats As Object, i As Long
Dim TotalAnimals As New Collection, animT As AnimalClass
Set animT = New AnimalClass
Set Cows = CreateObject("scripting.dictionary")
For i = 1 To 2: Cows(i) = "Cows " & i: Next i 'load the dictionary
animT.obj = Cows: animT.Name = "Cows"
TotalAnimals.Add animT 'add the class in Collection
Set animT = New AnimalClass
Set Dogs = CreateObject("scripting.dictionary")
For i = 1 To 3: Dogs(i) = "Dog " & i: Next i
animT.obj = Dogs: animT.Name = "Dogs"
TotalAnimals.Add animT
Set animT = New AnimalClass
Set Goats = CreateObject("scripting.dictionary")
For i = 1 To 4: Goats(i) = "Goat " & i: Next i
animT.obj = Goats: animT.Name = "Goats"
TotalAnimals.Add animT
Dim myAnimalType As Variant
For Each myAnimalType In TotalAnimals
Debug.Print myAnimalType.Name, myAnimalType.obj.count, myAnimalType.obj.Items()(myAnimalType.obj.count - 1)
Next
End Sub