#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».. Замените, и это сработает