Словарь коллекций Excel VBA

#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:

Здесь две проблемы:

  1. Dim внутри цикла работает не так, как вы ожидаете. Он создает переменную при первом ее обнаружении, после чего она игнорируется. Чистый эффект, вы создаете только одну коллекцию и добавляете в нее все идентификаторы catagoryID
    , чтобы исправить элемент 1, поместить Dim categoryIdCollection As Collection вне цикла и Set categoryIdCollection = New Collection внутри цикла (вместо Dim ... )
  2. В окне просмотра словаря отображаются ключи, а не элементы. Чтобы увидеть элементы (т. е. Collections ), смотрите providerNamesDictionary.items