Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Создание объектов Collection

Объекты Соlection создаются в программе точно так же, как и любые другие объекты, с использованием ключевого слова As для определения типа. Как и с другими объектами, вас есть на выбор два варианта.

* Можно объявить имя переменной для объекта и затем использовать оператор Set, чтобы создать ее. При этом в операторе Set нужно использовать ключевое слово New, чтобы создать новую коллекцию. Например:

Dim colMixedBag As Collection

* * *

Set colMixedBag = New Collection

' создание коллекции

colMixedBag.Add "Howard, Ethel"

' добавление элемента

* Можно обязать VBA создать объект автоматически при первом использовании переменной в программном коде. Для этого нужно поместить ключевое слово New в объявление переменной;

Dim colSetOfStuff As New Collection

* * *

' следующий оператор создает коллекцию

' при добавлении в нее целого значения

colSetOfStuff.Add intStuffing

Для заполнения созданной коллекции данными используйте метод Add (Добавить) точно так же, как при добавлении объектов во встроенные коллекции VBA-приложения (см, главу 12). Примеры использования метода Add вы найдете и в предыдущем разделе.

Синтаксис метода Add выглядит так:

Add (элемент[, имя] [, before индекс] [, after индекс])

При этом выражение элемент обязательное, оно может быть буквальным значением, переменной, ссылкой на объект или более сложным выражением, составленным из этих компонентов, - в общем, всем, что возвращает значение, распознаваемое VBA. Остальные аргументы метода Add необязательны, они обсуждаются в следующих разделах.

В общем-то, всегда можно обратиться к элементу коллекции по его индексу в этой коллекции, ло зачастую удобнее назначить элементу информативное имя. Для этого нужно при добаюекии элемента R коллекцию указать его имя в виде строки:

colFinancials - Add 14 32 3 . 44, "Продажи за февраль"

В этом операторе в коллекции colFinancials добавляется значение 14323 .44. Одновременно для этого элемента создается имя. Вполне допустимо при задании имени использовать переменную типа String.

Имя не только легче запомнить, чем индекс, оно, к тому же, обеспечивает единственный надежный способ доступа к конкретному элементу коллекции. При использовании методов Add и Remove позиции элементов данных в коллекции могут меняться. Даже если элемент с №69 станет 29-м, вы все равно сможете воспользоваться значением этого элемента, если знаете его имя.

Имя элементу можно присвоить только с помощью метода Add. Чтобы присвоить имя элементу, уже существующему без имени, придется удалить имеющуюся копию с помощью Remove и использовать Add для добавления элемента снова.

Иногда удобно разместить элементы коллекции в определенном порядке. И даже если при этом нельзя добавлять элементы в нужном порядке последовательно, то все равно нет проблем - метод Add позволяет вставлять элементы туда, куда требуется, просто доя этого нужно использовать аргументы before (.перед) и after (после).

Предположим, что вам нужно вставить новый элемент перед 35-м элементом в коллекции.

Вы можете использовать для этого оператор следующего вида:

colAnimals. Add strSpecies, before 35

Добавленный элемент станет 35-м элементом коллекции, подвинув все последующие (В отличие от- массивов, элементы коллекций нумеруются с 1.) Чтобы сообщить VBA, где вставить новый элемент, можно использовать и имя существующего элемента, например:

colОвощи. Add = stiCopt, after "Помидор"

В данном случае VBA найдет в коллекции существующий элемент с именем Помидор и сразу после него вставит новый.

Ясно, что в оператор, использующий метод Add, можно включить либо before, либо after, но никак не оба этих аргумента.

Для добавления в коллекцию множества элементов можно использовать цикл For . . . Next, подобно тому, как это делалось с массивами. Например:

Dim X As Integer, Y As Integer

У = 12

For X = 1 To 30

colHouseOfValues.Add Y * X

Next X

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

colМинералы.Remove 2123

colМинералы.Remove "Боксит"

Не забывайте, что при удалении элемента, VBA, так сказать, "заполняет дыры" - номера всех элементов, следующих за удаленным, уменьшатся на 1.

Запутаться в размерах коллекции несложно, особенно после многократного использования Add и Remove. Родовой объект Collection имеет только одно свойство – Count (подсчет), - но, в силу вышесказанного, это свойство оказывается жизненно важным. Значение этого свойства можно присвоить переменной, например, так:

intРазмерКоллекции = col20Вопросов.Count

Его можно также использовать в условном выражении, как здесь:

If colPrices.Count > 1000

MsgBox "Слишком много позиций!"

End If

Кроме того, значение свойства Count можно использовать в цикле For . . . Next, чтобы выполнить некоторые действия по отношению ко всем элементам коллекции, например:

Dim Z As Integer

For Z = 1 To col Prices.Count

MsgBox "Цена " & col Prices ( Z)

Next Z

Поделиться:
Популярные книги

Древесный маг Орловского княжества 10

Павлов Игорь Васильевич
10. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 10

Жена неверного генерала, или Попаданка на отборе

Удалова Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Жена неверного генерала, или Попаданка на отборе

Юнлинг

Метельский Николай Александрович
Фантастика:
героическая фантастика
космическая фантастика
попаданцы
8.35
рейтинг книги
Юнлинг

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Интриганка

Шелдон Сидни
Приключения:
исторические приключения
9.24
рейтинг книги
Интриганка

Воронцов. Перезагрузка

Тарасов Ник
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Воронцов. Перезагрузка

Рассвет русского царства 3

Грехов Тимофей
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Рассвет русского царства 3

#Бояръ-Аниме. Газлайтер. Том 13

Володин Григорий Григорьевич
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13

Лекарь Империи 4

Карелин Сергей Витальевич
4. Лекарь Империи
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 4

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Старый, но крепкий 5

Крынов Макс
5. Культивация без насилия
Фантастика:
рпг
аниме
уся
фэнтези
5.00
рейтинг книги
Старый, но крепкий 5

Возмутитель спокойствия

Владимиров Денис
1. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Возмутитель спокойствия

Возвращение

Кораблев Родион
5. Другая сторона
Фантастика:
боевая фантастика
6.23
рейтинг книги
Возвращение

Адепт

Листратов Валерий
4. Ушедший Род
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Адепт