Структуры
Структура – это сложный тип данных, представляющий собой совокупность переменных, хранящихся и обрабатываемых совместно. Переменные, входящие в состав структуры, называются полями (членами) структуры. В состав структуры могут входить переменные как стандартных, так и определенных пользователем типов данных.
Использование структур в программах зачастую позволяет уменьшить объем и сложность алгоритмов работы с данными. Например, для хранения большого количества записей с именами, адресами и телефонами потребовались бы три массива. При использовании же структуры с полями для имени, адреса и телефона для хранения всей информации потребуется всего один массив (VBA позволяет создавать массивы структур).
Описание структур
Для описания структуры в программе на VBA в блок деклараций модуля необходимо поместить следующую конструкцию:
[Public | Private] Type Имя_структуры
Поле1
Поле2
…
ПолеN
End Type
Ключевые слова Public и Private задают область видимости структуры (по умолчанию используется Public):
• Publiс – применяется для описания структуры, которую можно использовать (объявлять переменные этого типа) во всех модулях проекта; недопустимо в модулях класса;
• Private – применяется для описания структуры, которую можно использовать только в том модуле, где эта структура описана.
После ключевого слова Туре следует имя описываемой структуры. Внутри блока Type-End Туре помещаются объявления переменных-членов структуры. Эти объявления аналогичны объявлениям обычных переменных и отличаются только отсутствием в начале ключевых слов Dim, Static, Private или Public и тем, что в одной строке можно объявлять только одну переменную.
Пусть некоторой компании необходимо хранить данные об имени, фамилии, адресе, телефоне и дате рождения своих сотрудников. Совместно с этими данными нужно хранить информацию о проекте, в котором принимает участие каждый сотрудник. Ниже представлено описание структур, с помощью которых можно реализовать хранение требуемых данных.
Type ПроектИнформация
Название As String
Срок_завершения As Date
End Type
Type Сотрудник
Имя As String
Фамилия As String
Адрес As String
Телефон As String
Дата_рождения As Date
Проект As ПроектИнформация
End Type
Далее на этом примере рассмотрим особенности работы со структурами в программах на VBA.
Объявление переменных, содержащих структуры
Объявления переменных, содержащих структуры, выглядят точно так же, как объявления переменных другого типа. Ниже приведен пример объявления одной переменной, содержащей структуру Сотрудник:
Dim worker As Сотрудник
VBA позволяет создавать массивы любых типов данных, в том числе и структур:
Dim workers (15) As Сотрудник
В данном случае будет создан массив из 15 структур типа Сотрудник.
Примечание
При объявлении переменных, содержащих структуры, происходит автоматическая инициализация всех полей созданных структур.
Доступ к полям структур
Для доступа к содержимому полей структуры необходимо использовать символ «.» (точка). Ниже приведен пример получения значений полей с именем и телефоном сотрудника:
strFirstName = worker.Имя
strPhone = worker.Телефон
При доступе к массиву структур получение значений полей будет выглядеть следующим образом:
strFirstName = workers(15). Имя
strPhone = workers(15). Телефон
Получить значения полей вложенной структуры можно следующим образом (Проект – вложенная структура):
strName = worker.Проект. Название
datDate = worker.Проект. Срок_завершения
При работе со структурами необходимо помнить, что каждое поле структуры – это переменная, которой можно присваивать значение. Ниже приведен пример заполнения структуры с информацией о сотруднике:
worker.Имя = «Иван»
worker.Фамилия = «Иванов»
worker.Адрес = «ул. Первомайская, д. 100, кв. 5»
worker.Телефон = «(095) 200 00 00»
worker.Дата_рождения = «12.03.1978»
worker.Проект. Название = «План здания»
worker.Проект. Срок_завершения = «15.09.2005»
Содержимое полей структур можно использовать в любых корректных выражениях, например:
strFullName = "Имя: " & worker.Имя & ", фамилия: " & worker.Фамилия
При использовании заполненной чуть выше структуры (с информацией о сотруднике Иванове) строка strFullName в результате обработки выражения получит значение" Имя: Иван, фамилия: Иванов".