
Косарев_Экомическая информатика
.pdfПрограммирование |
391 |
8.4. ЯЗЫК ПРОГРАММИРОВАНИЯ VBA
8.4.1. ДАННЫЕ И ИХ ОПИСАНИЕ
Алфавит и лексемы языка
Язык программирования VBA служит для написания кода программы. Он, как и другие языки, имеет свой алфавит. В него входят:
•прописные и строчные буквы латинского алфавита (А, В,..., Z, a, b,..., z);
•прописные и строчные буквы кириллицы (А - Я, а -я);
•цифры от 0 до 9;
•символ подчеркивания «_»;
•неотображаемые символы («обобщенные пробельные сим волы»), используемые для отделения лексем друг от друга (про бел, табуляция, переход на новую строку);
•специальные символы, участвующие в построении конструк ций языка:
+ - * / И = > < [ ] ( ) . : { } ' & © ;
• составные символы, воспринимаемые как один символ: <=
Разделители в составных символах недопустимы. В коммен тариях, строках и символьных константах могут использоваться и другие символы.
Комментарий - это пояснение в исходном тексте программы. Он представляет собой последовательность любых символов, раз мещаемых на одной строке исходного текста программы, кото рая начинается со знака « ' » (апостроф) или с ключевого слова REM, например:
' (это комментарий); Rem (это тоже комментарий).
Программный код VBA представляет собой последователь ность лексических единиц (лексем), записанных в соответствии с принятыми синтаксическими правилами, которая реализует нуж ную семантическую конструкцию.
Лексема - это единица текста программы, которая имеет оп ределенный смысл для компилятора и которая не может быть раз бита в дальнейшем. В VBA есть шесть классов лексем: свободно
392 |
Глава 8 |
выбираемые идентификаторы; служебные (зарезервированные) слова; константы; строки (строковые константы); операции (зна ки операций); разделители (знаки пунктуации).
Идентификатор представляет собой последовательность букв, цифр и символов подчеркивания. Посредством идентификаторов обозначают имена переменных, констант, процедур и функций. Выбирая идентификатор для имени, следует учитывать два обсто ятельства. Во-первых, имя должно быть содержательным, т.е. от ражать назначение переменной, что делает программу более «чи табельной». Во-вторых, VBA накладывает на имена следующие ограничения:
•имя должно начинаться с буквы;
•имя не должно содержать точки, пробела, разделительных символов, знаков операций, а также специальных символов;
•имя должно быть уникальным, оно не должно совпадать с зарезервированными словами VBA или с другими именами;
•длина имени не должна превышать 255 символов.
П р и м е р ы п р а в и л ь н ы х имен:
strMyName, i, intNumOne, StrlnputValue, intNumber2, Б^Фамилия, Номер и т.п.
П р и м е р ы н е п р а в и л ь н ы х имен:
2Week (имя начинается с цифры);
_Номер (имя начинается со знака подчеркивания); Second . Week (в имени есть точка);
Dim, As, Private (эти слова являются зарезервированными); Number One (в имени есть пробел).
Перечень зарезервированных в VBA слов приведен ниже.
All |
Else |
Is |
ON |
SELECT |
As |
Empty |
JOIN |
On |
Set |
ASC |
Error |
Len |
Option |
Static |
Binary |
False |
Let |
Optional |
Step |
BY |
For |
Lock |
ParamArray |
String |
ByRef |
Friend |
Me |
TABLE |
|
ByVal |
Get |
Mid |
Private |
Then |
CREATE |
IN |
New |
Property |
Time |
Date |
INDEX |
Next |
Public |
To |
DESC |
Input |
Nothing |
Resume |
WITH |
DROP |
INTO |
Null |
Seek |
WithEvents |
Программирование |
393 |
Имена могут быть простыми или составными. |
|
П р и м е р ы п р о с т ы х и с о с т а в н ы х имен |
перемен |
ных: |
|
N , I, Number, Номер (простые имена переменных); ФамилияСтудента (составное имя переменной, оно несет в себе информацию о фамилии студента).
Существуют соглашения по стилю составления имен, которых желательно придерживаться:
•идентификатор должен понятным образом отражать назна чение переменной, что способствует пониманию программы;
•в именах лучше использовать строчные буквы, если имена состоят из нескольких названий, их нужно отделять друг от друга подчеркиванием или начинать новое слово с прописной буквы;
•имена констант следует составлять из прописных букв;
•название идентификатора нужно начинать со специального знака (приставки или префикса), который указывает на тип дан ных, связанный с этим идентификатором. Символы приставок, установленные специальным соглашением, и соответствующие им типы переменных приведены в табл. 8.1.
|
|
Т а б л и ц а 8.1 |
Символы приставок к именам переменных |
||
Тип данных |
Символ приставки |
Примеры |
Boolean |
bin |
blnMyOpt |
Byte |
byt |
bytZnac |
Collection |
col |
colLabel |
Currency |
cur |
curNorma |
Date (Time) |
dtm |
dtmDay |
Double |
dbl |
dblVolume |
Error |
err |
errFatError |
Integer |
int |
intlndex |
Long |
tog- |
IngFileSize |
Object |
obj |
objWindows |
Single |
sng |
sngValRecv |
String |
str |
strDriveName |
Variant |
vnt |
vntUniversal |
Определяемый пользователем |
udt |
udtStudent |
394 Глава 8
Объявление переменных
Переменные - это объекты, предназначенные для хранения данных. В различные моменты времени переменные могут хра нить различные значения. В переменных можно запоминать ка кие-либо значения и извлекать их из переменных.
Переменные в программе перед их использованием нужно объяв лять (декларировать). При объявлении переменной надо указать, что объявляется переменная, задать имя переменной и указать ее тип. Тип указывает способ представления переменной. В переменных можно хранить практически любые типы данных: число, строку тек ста, экземпляр объекта, элементы управления, базы данных. В VBA различают две группы типов данных: основные (иногда их называ ют базовыми или встроенными) и определяемые пользователем.
Для эффективного использования памяти компьютера необхо димо правильно выбирать тип переменной. В табл. 8.2 приведены базовые типы переменных, занимаемая ими память и диапазон изменения значений.
|
|
|
Таблица 8.2 |
|
Базовые типы переменных Visual Basic |
||
Тип |
Хранимая |
Занимаемая |
Интервалы |
|
информация |
память, байт |
значений |
|
Ц е л ы е т и п ы |
|
|
Byte |
Целые числа |
1 |
от 0 до 255 |
Boolean |
Логические зна |
2 |
True (истина) или False |
|
чения |
|
(ложно) |
Integer |
Целые числа |
2 |
от -32768 до 32767 |
Long Integer |
Длинные целые |
4 |
+/-2.1Е9 |
|
числа |
|
|
|
П л а в а ю щ и е т и п ы |
|
|
Single |
Вещественные |
4 |
от -3.402823Е38 до - |
|
числа одинар |
|
1.401298Е-45 для отрица |
|
ной точности с |
|
тельных чисел и от |
|
плавающей точ |
|
1.401298Е-45до |
|
кой |
|
3.402823Е38 - для поло |
|
|
|
жительных |
Double |
Вещественные |
8 |
от-1.7976313486232Е308 |
|
числа двойной |
|
до - 4.94065645841247Е- |
|
точности с пла |
|
324 - для отрицательных |
|
вающей точкой |
|
чисел и от |
|
|
|
4.94065645841247Е-324 |
|
|
|
до 1.7976313486232Е308 |
|
|
|
- для положительных |
Программирование |
|
395 |
|
|
|
|
Продолжение |
Тип |
Хранимая |
Занимаемая |
Интервалы |
|
информация |
память, байт |
значений |
|
С т р о к о в ы е т и п ы |
|
|
String (строка |
Текстовая ин |
1 байт на каж |
От 1 до 65400 |
фиксирован |
формация (стро |
дый символ |
|
ной длины) |
ка) |
|
|
String (строка |
Текстовая ин |
10 байт + 1 байт |
От 0 до 2 млрд символов |
переменной |
формация (стро |
на каждый сим |
|
длины) |
ка) |
вол |
|
|
О б ъ е к т н ы е т и п ы |
|
|
Object |
Рисунок или |
4 |
Ссылка на объект |
|
ссылка на лю |
|
|
|
бой другой объ |
|
|
|
ект |
|
|
Variant |
Т и п ы V a r i a n t |
Любое числовое или |
|
Значения любо |
16 байт для чи |
||
|
го из перечис |
сел, |
строковое значение |
|
ленных типов |
22 байта + 1 |
|
|
данных |
байт - на каж |
|
|
|
дый символ для |
|
|
|
строк |
|
|
П р о ч и е т и п ы |
|
|
Currency |
Числа, имеющие |
8 |
от |
|
до 15 цифр до |
|
-922337203685477.5808 |
|
десятичной точ |
|
до 922337203685477.5808 |
|
ки и 4 цифры |
|
|
|
после нее (де |
|
|
|
нежные едини |
|
|
|
цы) |
|
от 1 января 100 г. до |
Date |
Информация о |
8 |
|
|
дате и времени |
14 |
31 декабря 9999 г. |
Decimal |
Десятичное чис |
Целое - 29 знаков, веще |
|
|
ло |
|
ственное - 27 знаков по |
|
|
|
сле запятой |
Определяемое |
|
|
Соответствует диапазону |
пользователем |
|
|
базовых типов |
Декларация переменных может быть явной или неявной. Для явного определения переменных существуют два способа. Пер вый (предпочтительный) способ предполагает использование любого из следующих операторов:
[Static/Public/Private] Dim Имя 1 [As Тип][, HM*2[AS ТИП]] [....ИмяЩАвТип],
396 |
|
Глава 8 |
|
где Static (статический) |
- |
ключевое слово, которое определя |
|
|
|
ет, охраняет ли переменная свое |
|
|
|
значение при завершении блока |
|
|
|
программы (процедуры, функции) |
|
Private (частный), Public (общий) - |
и выходе из него; |
||
ключевые слова, определяющие |
|||
Dim (размер) |
|
область видимости переменных; |
|
- |
ключевое слово, которое сообща |
||
|
|||
|
|
ет VBA, что декларируется пере |
|
|
|
менная и резервируется область |
|
Имя |
|
памяти для ее хранения; |
|
- |
имя переменной (идентификатор, |
||
|
|
не входящий в перечень ключе |
|
As (как) |
|
вых слов VBA); |
|
- |
ключевое слово, которое сообща |
||
|
|
ет VBA, что определяется тип |
|
|
|
данных для переменной; |
|
Тип |
- |
тип данных для объявляемой |
|
|
|
переменной. |
При подготовке кода программы среда программирования оказывает помощь пользователю: после набора ключевого сло ва As раскрывается список, в котором наряду с другими типами объектов указаны и базовые типы переменных (рис. 8.12). Тип переменной можно установить, дважды щелкнув по имени типа в этом списке.
|
Книга! - Лист1 (Программа) |
|
|
|
|
|
|
Ц (Общая область) |
• •: ЩЩ1°ГтСа*,МЯ) |
: '•: |
|
•1 |
|||
Н И |
Option Explicit: |
|
|
|
|
||
• В |
Dim intHoMep As .'.-';' |
|
|
|
|
|
|
|
|
Щ Image |
••'::'.:',• |
; |
J | |
1 |
|
|
|
^Interior |
"; я |
|
|||
|
|
Ш IPicturejpisp |
|
|
Я |
|
|
|
|
ИИ-abel |
|
'Й'чЗ^^СЯ |
|
||
|
|
^LeaderUnes '.."]' |
: |
-v: '" Щ |
|
||
|
|
Ш Legend |
'• - |
|
~ ' "<:ш |
|
РИС. 8.12. Список подсказок о типах переменных
Программирование |
397 |
Другим способом явного объявления переменных является указание типа с помощью суффикса. В этом случае тип данных переменной определяется с помощью добавления в конец ее име ни специального символа описания типа - суффикса, поэтому ис пользовать ключевое слово As не требуется.
Синтаксис явного объявления переменных с помощью суффикса:
[Static/Public / Private] Dim Имя Переменной Суффикс
П р и м е р :
Dim strlnputMsgS (объявляется переменная типа «строка»
(String));
Static sngCalcAverage! (объявляется переменная типа Singl); Private intHoMep% (объявляется переменная типа «целое» (Integer)).
Ниже приведены типы переменных и соответствующие им суф фиксы, применяемые при декларации типов.
Тип переменной |
Суффикс |
Integer |
% |
Long |
& |
Single |
i |
Double |
# |
Currency |
@ |
String |
$ |
Byte |
Нет |
Boolean |
" |
Date |
'* |
Object |
M |
Variant |
II |
|
Хороший стиль программирования предполагает использова ние явной декларации с помощью ключевых слов Dim, Private, Public, Static, так как неявное объявление переменных может при водить к непредвиденным ошибкам в программе. Чтобы избежать неприятностей в случае ошибочной записи имени переменной, не обходимо в раздел описаний общей области помещать оператор Option Explicit. В этом случае VBA будет расценивать любую не явно объявленную переменную как ошибочную, например:
398 |
Глава 8 |
Option Explicit
Dim intMyNumber As Integer' Явное объявление переменной intMyNumber=10 ' Для явно объявленной переменной ошибки_
не будет
intMyNum=10' При ошибочном указании имени Option Explicit_ включит
'предупреждение об ошибке
Строковые переменные
Различают строки переменной и фиксированной длины. Стро ки переменной длины могут содержать до двух миллиардов сим волов. Когда такой переменной присваивается значение, размер переменной изменяется так, чтобы он соответствовал длине при своенного строкового значения.
Строка фиксированной длины - это строка постоянного разме ра, указанного при объявлении переменной. Если такой строке присваивается значение, более длинное, лишние символы отбра сываются. Если значение, которое присваивается, короче, то ос тающееся место заполняется пробелами. Строковые переменные фиксированной длины должны декларироваться явно. Синтаксис декларации:
Dim VarName As String * ДлинаСтроки
Здесь Длина Строки - целочисленная переменная или константа, со держащая число, которое указывает длину строковой переменной.
П р и м е р :
Dim strMyName AsString* 20 ' Объявляется строковая перемен_ ная ' фиксированной длины в 20 символов
или
Option Explicit
Dim intLen As Integer 'Объявляется целочисленная переменная Private Sub UserForm_Initialize()
intLen = 30 'Инициализация значения целочисленной пере_
менной
End Sub
Private Sub CommandButtonl_Click()
Dim strMyName As String * intLen' Объявляется строка длиной_ ' в 30 символов
strMyName = « Петров» End Sub
Программирование |
399 |
Константы Константы - это объекты, значения которых остаются по
стоянными и не могут быть изменены во время выполнения про граммы. Константы могут быть именованными и неименованны ми. Синтаксис языка VBA определяет три типа констант: симво лы, целые числа и вещественные числа.
Символьная константа служит для изображения отдельных знаков и представляет собой лексему, состоящую из изображае мого символа (или последовательности символов) и ограничива ющих кавычек. Например, «Р», «Program», «3.14»,«+» - неимено ванные символьные константы. Внутри кавычек может быть за писан любой изображаемый символ.
Синтаксисом языка предусмотрены следующие числовые кон станты: десятичные целые, шестнадцатеричные целые и восьмерич ные целые. Целая десятичная константа представляется десятич ным целым числом:
44 684 0 1024 (неименованные десятичные целые константы).
Целая шестнадцатеричная константа представляется как пос ледовательность шестнадцатеричных цифр, перед которой запи сан префикс &Н:
&Н16 (неименованная шестнадцатеричная константа, соответ ствующая десятичному целому 22);
&HFF (неименованная шестнадцатеричная константа, соответ ствующая десятичному целому 255).
Восьмеричная целая константа представляется как последо вательность цифр, не содержащая десятичных цифр старше 7, ко торой предшествует префикс &0:
&016 (восьмеричное представление десятичного целого 14); &О100 (восьмеричное представление десятичного числа 64).
Вещественные константы представляются в памяти компью тера в форме с плавающей точкой. Каждая вещественная констан та состоит из следующих частей: целая часть (десятичная целая константа); десятичная точка; дробная часть (десятичная целая константа); признак показателя «е» или «Е»; показатель (десятич ная целая константа):
400 |
Глава 8 |
44. 3.14159 44е0 .314159Е1
Различают встроенные константы Visual Basic (предопреде ленные константы) и константы, создаваемые пользователем.
Встроенные константы используются, например, для опреде ления цветовых наборов, задач доступа к данным, кодов клавиш, контуров и т.д. Встроенные в систему VBA константы имеют пре фикс vb. Они могут использоваться для различных целей. Для того чтобы узнать конкретное значение константы, можно воспользо ваться окном Просмотр объектов (см. рис. 8.8). После выбора константы ее значение и описание функции появятся в текстовом поле в нижней части окна Просмотр объектов.
П р и м е р ы :
MsgBox «Текстовое сообщение», vblnformation
В этом примере встроенная константа vblnformation указы вает, что в окне сообщения (рис. 8.13) должен быть помещен зна чок «Информация» (латинская буква «i»).
MsgBox « Текстовое сообщение», vbExclamation
В этом примере встроенная константа указывает, что в окне сообщения должен быть значок «Внимание» (восклицательный знак).
Рис. 8.13. Окно сообщения
Однако встроенного запаса констант при подготовке програм мы иногда бывает недостаточно. В этом случае можно создавать свои собственные именованные константы. Для определения кон стант служит ключевое слово Const. Синтаксическая конструк ция для декларирования констант напоминает оператор для дек ларации переменной и имеет вид:
[Public/Private] Const ИМЯ_КОНСТАНТЫ [As Тип] = значение