2015-07-21 3 views
3

Я понимаю, добавление объектов в коллекцию можно сделатьДобавление переменного количества объектов в коллекцию

Dim ItemList As Collection 
Set ItemList = New Collection 

Dim Item As New CItem 

Set Shoe = New CItem 
     With Shoe 
      .Quantity 
      .IDNumber 
      .Description 
     End With 
ItemList.Add Shoe 

Set Bag = New CItem 
     With Bag 
      .Quantity 
      .IDNumber 
      .Description 
     End With 
ItemList.Add Bag 

я мог бы назвать данные я хочу использовать как (Cost = Bag.Quantity * 2)

Однако моя проблема в том, что мой список предметов будет определен пользователем. Есть ли способ добавить переменное количество объектов в коллекцию и все еще иметь возможность извлекать отдельные данные по имени элемента?

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

Я хотел бы написать цикл, чтобы прочитать все эти объекты под класс «Пункт», но все еще быть в состоянии вычислить (xyz = Солнцезащитные очки.Количество + Брюки.Частота - Сумка.Человек). Я пытался использовать счетчики, но, похоже, он принимает только постоянные выражения.

Возможно ли это? Если так, я был бы признателен за помощь в выяснении, как это сделать.

+0

Я не эксперт по ООП в VBA, так что я m not sure для имени retreveing, но вы можете создать класс 'Item' и определить свойство' Type' для этого (за исключением случаев, когда ваши объекты слишком сильно отличаются друг от друга, а затем могут быть беспорядочными в свойствах) – R3uK

+0

[** 1 **] (http://stackoverflow.com/a/19908375/2140173) и [** 2 **] (http://stackoverflow.com/a/19379641/2140173) для ge t вы начали на интерфейсах и oop в VBA –

ответ

3

Вы можете добавить элемент в коллекцию с ключом:

ItemList.Add Shoe, "Shoe" 

, а затем восстановить его, указав этот ключ:

Dim Shoe As CItem 
Set Shoe = ItemList.Item("Shoe") 
+1

Спасибо, что работает отлично. Спасибо за то, что вы ответили за быстрый ответ –

2
Set Shoe = New CItem 
     With Shoe 
      .Quantity 
      .IDNumber 
      .Description 
     End With 

Обратите внимание, что CItem объект, который вы создаете здесь не имеет свойство, которое описывает тип объекта. То есть, если вы посмотрите только на объект, нет способа сказать, что он «является обувью». Все, что вы знаете об этом объекте, - это количество, идентификационный номер и описание.

Вы указали переменную Shoe; но это просто имя переменной, а не упомянутый объект.

Что вам нужно сделать, это добавить какое-то свойство .Type или .Category, чтобы ваши объекты стали самоописательными. Ваш выше код будет изменен с еще одной линии, как это:

Shoe.Category = "Shoe" 

Это делает возможным принять коллекцию CItem с, перебирать их, и подвести итог количества в .Category.

Но объекты в вашем списке больше не будут иметь выделенное имя переменной.

+0

мм я действительно не вижу, как я могу применить то, на что вы ответили, в цикл для итеративного интеллектуального анализа данных. –

Смежные вопросы