image

Коллекция — это тип данных, в котором хранятся объекты, похожие на массивы (но разные). При написании базовых кодов VBA вы должны были использовать рабочие книги, рабочие листы, диапазоны и т. Д. Все они являются коллекциями. В этой статье мы узнаем о коллекциях VBA.

Что такое коллекция в VBA?

Коллекция — это тип данных, который хранит объекты аналогичного типа, как и массивы. Но в отличие от массивов, его размер можно динамически увеличивать или уменьшать в соответствии с требованиями.

Вы можете добавлять, находить, извлекать и удалять элементы из коллекций.

В отличие от массивов, вы не можете изменять значения элементов в коллекциях. Если хотите, используйте массивы как элемент в коллекции.

С коллекцией связано 4 свойства или метода.

Collection.Add

Collection.Item

Collection.Count

Collection.Remove

В этой статье мы рассмотрим использование этих свойств.

Как создать коллекцию в VBA?

Коллекция — это объект, поэтому ее необходимо объявить и инициализировать. Как и любой другой объект в VBA, существует два метода создания коллекции в VBA.

1. Мгновенное создание

Dim items as new Collection

В приведенном выше методе объект создается мгновенно. Вы можете сразу начать использовать эту коллекцию для своих нужд.

image

2. Отложенное создание

Dim items as Collection

Set items = New Collection

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

image

Добавление элементов в коллекцию (Collection.Add)

Мы используем метод Add для добавления новых элементов в коллекцию.

items.Add "Apples"

Приведенный выше код добавит в коллекцию строку «Яблоки».

items.Add 1.4

Приведенный выше код добавит двойной 1.4 в конец коллекции.

image

Мы также можем определить ключи к этим элементам. Эти ключи можно использовать для доступа к элементам коллекции.

image

Вставка элементов в коллекцию до или после существующего элемента

Метод Add добавляет новые элементы в конец коллекции. Метод add имеет четыре параметра.

Add(item,[Key],[Before],[After])

Первый аргумент необходим. Это объект или то, что вы хотите добавить в коллекцию. Остальные аргументы необязательны. Мы увидим использование этих аргументов в этом разделе.

Если мы хотим добавить какой-либо элемент до или после определенного индекса / ключа, мы используем параметры Before и After метода Add.

items.Add True, "b", "cnst"

'Or

items.Add True, Before:="cnst"

Обе строки вставят логическое значение перед ключом «cnst» в элементах коллекции VBA.

Чтобы вставить элемент после пертикулярного индекса / элемента / ключа, мы используем параметр After метода Add.

'inserting "Mango" with key "m" after key "cnst"

items.Add "Mango", Key:="m", after:="b"

Над строкой будет вставлено «Mango» с клавишей «m» после клавиши «b».

image

Примечание: * Ключи предметов должны быть уникальными. Любой ключ, который уже существует в коллекции, не будет принят. VBA вернет ошибку, что «ключ уже связан с элементом этой коллекции».

image

Мы можем использовать это в наших интересах, чтобы получить уникальный список из коллекции.

Доступ к элементам коллекции (Collection.Item)

Есть два метода доступа к элементам коллекции. . CollectionName («индекс / ключ»)

  1. CollectionName.Item («индекс / ключ»)

Например, для доступа к члену в коллекции элементов * с индексом 1 и ключом «apl» я могу использовать любой из приведенных ниже кодов VBA.

Debug.Print items.Item(1)

--

Debug.Print items(1)

--

Debug.Print items.Item("apl")

--

Debug.Print items("apl")

image

Как узнать количество предметов в коллекции? (Collection.Count)

Чтобы получить общее количество объектов или элементов в коллекции, мы используем функцию коллекции .Count. Метод .Count возвращает общее количество элементов в коллекции.

items.Count

Над строкой будет указано количество объектов в коллекции.

Как получить доступ ко всем предметам коллекции?

Единственный способ получить доступ ко всем элементам коллекции в VBA — это циклы.

Мы перебираем каждый элемент коллекции, чтобы получить к ним доступ. Для этого мы используем цикл for. Цикл for-each считается самым быстрым и чистым способом доступа к объектам коллекции.

Цикл по коллекции в VBA

Есть несколько способов перебрать коллекцию в VBA. Мы будем использовать наиболее элегантный вариант для каждого цикла для перебора коллекции.

Слишком цикл через каждый элемент коллекции, просто используйте эту строку кода VBA.

For Each itm In items

Debug.Print itm

Next itm

image

Удаление элементов из коллекции (Collection.Remove)

Чтобы удалить элемент из коллекции vba, мы можем использовать метод Remove. Метод удаления принимает один аргумент. Это может быть индекс или ключ элемента (если есть).

items.Remove (1) 'using index

--

items.Remove 1

--

items.Remove ("apl") 'using key

--

items.Remove "apl"

Удаление коллекции в VBA

Ну, в vba нельзя удалить коллекцию. Однако вы можете удалить все элементы этой коллекции, снова установив ее как новую коллекцию.

Set items = New Collection

Эта строка кода создаст новую коллекцию по адресу элементов.

Следовательно, наша коллекция будет опустошена.

image

Массив против коллекции в VBA

  1. Array size is predefined. The size of array can not be changed

normally.

  1. Array’s can hold only same type of data and the type must be declared

first.

  1. Indexing in array starts from 0

  2. Array members does not have any associated key.

  3. Arrays are mutable. You can change the values of its members.

  1. Collection’s size changes as items are added or removed.

  2. A collection can hold any number of data type. As you have seen in the

above examples.

  1. Indexing in VBA Collection starts from 1.

  2. Collection members can have keys associated with.

  3. Collections are immutable. You cannot change values of its member

directly.

Так что да, ребята, это основы коллекций. Коллекция VBA имеет множество преимуществ и возможностей использования в офисных инструментах. Мы будем исследовать их вместе. А до тех пор, если у вас есть какие-либо вопросы относительно сбора или чего-либо, связанного с Excel / VBA, укажите в разделе комментариев ниже.