#vba #excel
#vba #excel
Вопрос:
Я хочу иметь словарь, где ключом будет строка ProviderName, а значением будет коллекция идентификаторов категорий. Тем не менее, это результат, который я получаю:
Похоже, что ключ — это просто item1, item2, item3 и т.д., А значение — это просто ProviderName, а коллекция идентификаторов категорий вообще отсутствует.
Мой код:
For i = 2 To Selection.Rows.Count
providerName = SingleLine(i, 1)
categoryId = SingleLine(i, 3)
Dim categoryIdCollection As New Collection
If Not providerNamesDictionary.exists(providerName) Then
categoryIdCollection.add (categoryId)
providerNamesDictionary.add key:=providerName, Item:=categoryIdCollection
Else
Dim tempCategoryIdCollection As Collection
Set tempCategoryIdCollection = providerNamesDictionary(providerName)
tempCategoryIdCollection.add (categoryId)
Set providerNamesDictionary(providerName) = tempCategoryIdCollection
End If
Как мне получить ключ в качестве имени поставщика, а значение — в качестве набора идентификаторов категорий?
Ответ №1:
Здесь две проблемы:
Dim
внутри цикла работает не так, как вы ожидаете. Он создает переменную при первом ее обнаружении, после чего она игнорируется. Чистый эффект, вы создаете только одну коллекцию и добавляете в нее все идентификаторы catagoryID
, чтобы исправить элемент 1, поместитьDim categoryIdCollection As Collection
вне цикла иSet categoryIdCollection = New Collection
внутри цикла (вместоDim ...
)- В окне просмотра словаря отображаются ключи, а не элементы. Чтобы увидеть элементы (т. е.
Collections
), смотритеproviderNamesDictionary.items