Типы данных
В VBA, кроме констант, описываемых пользователем, существуют предопределенные встроенные константы. При именовании встроенных констант используется стандартное соглашение, позволяющее определить, к объектам какого приложения относится эта константа. Например, встроенные константы, относящиеся к Word, начинаются с букв wd, Excel – ex, PowerPoint – pp, Access – ac, VBA – vb. Например, в случае:
Call
Msgbox(
"Использование констант"
, vblnformation)
…используется константа vblnformation, с помощью которой в диалоговом окне выводится значок "Информация" (рис. 20.2).
После того как выше мы описали работу с простыми типами данных, перейдем к рассмотрению более сложных – структурных типов данных. Сейчас мы рассмотрим простейший из них – массивы.
Массив – это совокупность однотипных индексированных переменных Представьте, что имеется 20 магазинов, которым издательство поставляет книгу "Microsoft Outlook 2002 в подлиннике". Естественным образом хоте лось бы иметь список, в котором было бы указано количество экземпляров, проданных каждому магазину. Данные количества для разных магазинов являются, в принципе, элементами одного типа (а точнее, просто числами). Таким образом, данная совокупность представляет собой массив. Обращение же к элементам массива происходит путем указания имени данного массива и порядкового номера требуемого элемента. Конечно, вы вправе присвоить каждому магазину персональное имя и работать с ними, как с обособленными единицами. Но представьте, что вам надо провести одну и ту же процедуру для каждого магазина, например подсчитать общее количество проданных книг. Не проще ли задать цикл для всего массива магазинов, где изменяется лишь индекс, который однозначно определяет магазин?
Количество же индексов массива в VBA может достигать 60, но это своего рода излишество, как правило, используются массивы с одним, двумя и тремя индексами. О количестве индексов массива говорят как о размерности массива. Массивы с одним индексом называют одномерными, с двумя – двумерными и т. д. Продолжив наш пример, предположим, что издательство выпускает не одну книгу, а множество различных книг, скажем, еще 100. Таким образом, вы имеете дело с двумерным массивом (20x100) и обращение к необходимому элементу становится тривиальным: магазин №7 книга №56. Данное обращение покажет количество проданных книг №56 магазину №7. Конечно, в языке VBA подобные выражения неприемлемы, но суть остается той же. Как и любой элемент данных, массив необходимо объявлять. Ниже приведен синтаксис объявления массива:
{
Dim
|
Private
|
Public
|
Static
} имяМассива (<размер1> [, <размер2>]...) [
As
типДанных] [, имяМассива (<размер1> [, <размер2>]...) [
As
типДанных]]
Итак, опять мы встречаем знакомые конструкции – операторы объявления массива и имя массива. Размер массива может задаваться тремя способами.
- Объявляется только верхняя граница, при этом нижняя граница по умолчанию принимает значение, равное 0. Синтаксис подобного объявления прост: {верхняяГраница}
- Объявляется нижняя и верхняя граница изменения индекса: (нижняяГраница То верхняяГраница)
- Размер массива вообще не объявляется, размерность массива неизвестна: ()
Приведем ряд примеров, поясняющих использование синтаксических конструкций. В первом из них объявляется одномерный массив типа variant с использованием ключевого слова Dim, причем индексация производится от – 14 до – 1. Данная индексация имеет смысл, например, в случае с метеорологическими данными, представляющими средние дневные температуры за последние две недели. В таком случае temperature (-2) будет соответствовать позавчерашней температуре. Во втором примере показано объявление двумерного массива магазинов с использованием константных аргументов, и инициализация элемента (7, 56).
Программа 20.4. Объявление массивов.
{Первый пример}
Dim
temperature(-14
To
-1)
temperature(-2) = -10
{Второй пример}
Const
numbShop
As
Integer
= 20, numbBook
As
Integer
= 100
Dim
numbBookSale (1
To
numbShop, 1
To
numbBook)
As
Integer
numbBookSale(7, 56) = 300
В приведенных примерах речь все время шла о массивах фиксированного размера, количество элементов в которых явно указано во время описания в операторе Dim. Такие массивы называются статическими. Но иногда количество элементов массива изначально не известно. Например, вы не знаете точного количества магазинов (возможно, появятся еще несколько магазинов, с которыми издательство будет сотрудничать). Как быть? Не стопорить же сбыт продукции до выявления конечного числа магазинов.
Для решения подобных проблем VBA предлагает использование динамических массивов, т. е. массивов, размеры и количество элементов которых при описании не фиксируются, но могут быть определены непосредственно при выполнении программы. Синтаксис объявления динамического массива отличается от объявления статического только тем, что после имени массива в нем стоят пустые скобки. Однако, перед тем как использовать массив, нужно выполнить оператор ReDim, который задаст размерность и диапазоны изменения индексов динамического массива.
ReDim
имяМассива(размер1[, размер2...])
При всем обилии встроенных типов данных часто возникает желание ввести новый тип данных, содержащий некоторые определенные значения. Такой тип называется в VBA перечисляемым. Мы поясним перечисляемые типы на следующем, довольно характерном, примере.
Мы хотим ввести тип "неделя". Элементами данного типа будут только обозначения дней недели, и, соответственно, область значений будет изменяться от понедельника до воскресенья.
[
Private
|
Public
]
Enum
имяТипа
имяЗначения [ = Константа] имяЗначения [ = Константа]
End
Enum
Синтаксис довольно прост. Операторы Private и Public объявляют область видимости для типа (кстати, перечисляемые типы могут описываться только на уровне модуля, т. е. нельзя описать перечисляемый тип внутри процедуры). Затем следует ключевое слово Enum и имятипа, после чего – перечисление значений типа (по одному на строчке). По умолчанию все значения типа перенумеровываются целыми числами, начиная с 0, но вы можете самостоятельно указать константное целое значение для значений типа.