Коллекции Excel VBA / coll.Count — динамический

#excel #vba #collections

#excel #vba #Коллекции

Вопрос:

У меня есть запрос по коллекциям. Я пытаюсь создать некоторый код, который будет динамически обращаться к моим коллекциям. Но я сталкиваюсь со следующими проблемами.

Пример

Я создал коллекцию и выполнил следующее Debug.Print Backpack_O.Count . Результат был 3 — это ожидалось.

Однако, когда я пытаюсь сделать это динамически Debug.Print wks_GM2.Range("A" amp; b) amp; "_" amp; wks_GM2.Range("D" amp; b) amp; ".Count" , мой результат Backpack_O.Count — не желаемый результат.

Причина, по которой мне это нужно динамически, заключается в том, что я могу заменить это в For цикле. В качестве примера:

 For i = 1 To wks_GM2.Range("A" amp; b) amp; "_" amp; wks_GM2.Range("D" amp; b) amp; ".Count"
  

Я попытался обернуть это в CLng CStr etc, но у меня ничего не получается. Кто-нибудь может помочь мне решить эту проблему…

Приветствия!!!

Комментарии:

1. Вы можете попробовать . Диапазон («A» amp; b amp; «: D» amp; b).ячейки.количество. отладка.выведите конкатенацию, чтобы убедиться, что вам не нужно переносить ‘b’ в Cstr.

2. Это не работает

3. Извините. Должно было быть . Диапазон («A» и b, «D» и b). Ячейки. Количество

Ответ №1:

Одним из вариантов является создание коллекции коллекций с именами коллекций в качестве ключей. Например:

 Dim Backpack_0 As New Collection
Dim Backpack_1 As New Collection
...

Dim masterCollection As New Collection
masterCollection.Add Item:=Backpack_0, Key:="Backpack_0"
masterCollection.Add Item:=Backpack_1, Key:="Backpack_1"
...
  

Теперь вы можете динамически ссылаться на отдельные коллекции, создавая ключ из своего рабочего листа:

 Dim collectionName as String
collectionName = wks_GM2.Range("A" amp; b).Value amp; "_" amp; wks_GM2.Range("D" amp; b).Value

For i = 1 to masterCollection(collectionName).Count
  

Комментарии:

1. Для справки — если кто-нибудь просматривает это, я использовал букву «O», где @BigBen использовал цифру «0».. Замените, и это сработает