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

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

Жанры

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

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

Законы Рода. Том 5

Мельник Андрей
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Господин из завтра. Тетралогия.

Махров Алексей
Фантастика:
альтернативная история
8.32
рейтинг книги
Господин из завтра. Тетралогия.

Чевенгур

Платонов Андрей Платонович
Проза:
советская классическая проза
6.75
рейтинг книги
Чевенгур

Звездная Кровь. Изгой

Елисеев Алексей Станиславович
1. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Алхимик

Джеймс Питер
Top Thriller
Детективы:
триллеры
8.32
рейтинг книги
Алхимик

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

Винокуров Юрий
30. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга ХХХ

На границе империй. Том 10. Часть 2

INDIGO
Вселенная EVE Online
Фантастика:
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 10. Часть 2

Заботы Элли Рэйт

Ром Полина
Фантастика:
попаданцы
фэнтези
6.25
рейтинг книги
Заботы Элли Рэйт

Адвокат империи

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

Газлайтер. Том 27

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

Наша навсегда

Зайцева Мария
2. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Наша навсегда

Седина в бороду, Босс… вразнос!

Трофимова Любовь
Юмор:
юмористическая проза
5.00
рейтинг книги
Седина в бороду, Босс… вразнос!

Личный аптекарь императора

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