VBA для чайников
Шрифт:
Использование переменных в операторах присваивания
Можно присваивать переменным не только буквальные значения - точно так же можно присваивать и значения, определяемые другими переменными. В операторе curSalePrice = curCost * sngMargin переменной curSalePrice присваивается значение, равное произведению переменных curCost и sngMargin. В данном случае выражение состоит из переменных, а не из буквальных значений. VBA вычисляет результат на основе значений, хранящихся в этих переменных. (Кстати, в полном соответствии с рекомендованными в главе 6 соглашениями по выбору имен, curSalePrice и curCost являются переменными
Использование функций в операторах присваивания
Поскольку функции и создаваемые вами процедуры типа Function возвращают значения, их тоже можно использовать в операторах присваивания. Например:
ctrFavorite = InputBox(Кто сегодня фаворит?)
В данном случае используется функция VBA Input Box, которая отображает на экране небольшое диалоговое окно с указанным сообщением и полем для ввода ответа пользователем. Этот ответ и будет возвращаемым функцией значением, представляющим собой строку текста (функция Input Box рассматривается подробно в главе 11).
Выражен-и-я
Выражение представляет собой часть оператора VBA. которая в результате ее вычисления дает некоторое значение (этим значением может быть число, строка текста или ссылка на объект). Выражение может состоять из одного или нескольких следующих элементов в любой их комбинации:
* переменные (например, bytMonth или boolWinter );
* буквальные значения (например, 1234 или Это только пример);
* константы (они предназначены для хранения буквальных значений и рассматривают; ся в разделе 'Работа с постоянными значениями);
* функции VBA (например, Input Box или Sqr );
* процедуры типа Function.
Если в выражении не меньше двух таких элементов, то они должны быть связаны либо знаками операций (к последним относится, например, знак +), либо функциями и процедурами типа Function, вложенными внутрь других функций и процедур типа Function.
Обратите внимание на то, что если выражение состоит из нескольких компонентов, то каждый из них тоже будет выражением со своим собственным значением.
Что содержит переменная перед тем, как ей присваивается значение?
Во время выполнения процедуры VBA выделяет для каждой переменной из этой процедуры пространство в памяти и приписывает переменной начальное значение; означающее, что в переменной ничего не хранится. Чаще всего перед использованием переменной в выражениях вы присваиваете ей нужное вам значение, но вполне допустимо, а порой и выгодно, использовать переменную до того, как вы будете уверены, что она содержит заданное вами значение.
Предположим, что в программе есть процедура, которая должна выполняться только при определенных условиях. Допустим также, что в этой процедуре должно присваиваться значение одной из переменных программы. В такой ситуации, если в другой процедуре нужно выяснить, выполнялась ли первая процедура, то это можно сделать, выяснив, хранится ли в данной переменной значение.
Вот какие значения хранятся в переменных перед тем, как вы им присваиваете свои значения.
Тип данных | Начальное значение |
Все числовые типы данных | О |
string (переменной | Строка нулевой длины |
string (фиксированной длины) | Строка указанной длины, состоящая из символов, ASCIIкод которых равен 0 (эти символы невидимы на экране) |
Variant | Пусто (специальное значение, указывающее на то, что переменная этого типа не хранит никакого значения) |
Object | Ничто (специальное значение, указывающее на то, что переменной не присвоено никакой ссылки на объект) |
Работа с постоянными значениями
Если в программе есть значения, которые не должны меняться, то для представления таких значений не обязательно создавать переменные. Конечно, в любой процедуре для представления этих значений можно использовать и буквальные значения, но объявление представляющих эти значения констант, как правило, предпочтительнее.
Объявление констант
Для объявления констант используется ключевое слово Const:
Const cstrPetsName As String = "Пушок"
Const cDateTarget Date As Date = #5/26/2000#
Const cboolUp As Boolean = True
Все вполне аналогично объявлению переменных, за исключением того, что при объявлении константы необходимо указать ее значение. При объявлении констант можно указывать те же типы данных, что и для переменных, за исключением типа Object, пользовательского типа данных и пока что типа Decimal (см. табл. 7.1).
Обратите внимание, что имена объявленных мною констант начинаются со строчной буквы "с" (означающей сокращение от constant - константа). Таким образом, по имени сразу видно, что это константа, а не переменная. Если вас этот префикс не устраивает, выберите для своих констант другой, более подходящий вам.
Вы можете последовать примеру VBA и Visual Basic и выбрать префикс, соответствующий вашему имени, или префикс, соответствующий имени вашего VBA-проекта. VBA и Visual Basic идентифицируют константы с помощью префикса vb - например vbBl ue (константа, представляющая числовой код для синего цвета, а именно 16711680) или vbKeyTab (константа, представляющая числовой код клавиши <Tab>, а именно 9). VBA приложения часто идентифицируют свои константы с помощью префикса, специфического для этого приложения, например xlBarStacked (константа, представляющая числовой код для линейчатой диаграммы в Excel, а именно 58).
Кстати, константы, определенные VBA или VBA-приложением, тоже можно использовать в своих программах. Информацию об этих зарезервированных константах можно получить из справочной системы или в окне обозревателя объектов (см. главу 5).
Плоды использования констант
Объявив константу, вы получаете возможность использовать ее везде, где в программе потребуется представленное именем этой константы буквальное значение. Скажем, вы создаете программу, которая должна определять зарплату работника в зависимости от размера его обуви.