Основы программирования на VBA для Microsoft Excel. Учебное пособие
.pdf3.СИНТАКСИС
ИПРОГРАММНЫЕ КОНСТРУКЦИИ VBA
Основы синтаксиса
Под синтаксисом языка программирования понимается совокупность правил, которая определяет организацию элементов этого языка и порядок их использования. Синтаксис VBA почти полностью совпадает с синтаксисом VB. Прежде чем начинать программирование, следует ознакомиться с синтаксисом языка программирования.
Программы на VBA состоят из выражений (statements). Обычно в каждой отдельной строке записывается одно выражение, но из этого правила есть исключения.
Первое исключение заключается в том, что если необходимо в одной строке расположить несколько выражений, то они должны быть разделены двоеточием.
Второе исключение позволяет записать одно выражение в нескольких строках. Для разрыва выражения и перехода на следующую строку используется пробел, за которым следует символ подчеркивания и нажатие на клавишу Enter. Для удобства чтения программы рекомендуется продолжение строки выделять отступом.
В программах могут использоваться комментарии (comments). Под комментарием понимается текст, который не влияет на ход выполнения программы и служит для пояснений в программе.
Для обозначения текста, используемого в качестве комментария, этот текст должен быть предварен символом апострофа (одинарная кавычка) или ключевым словом REM (от слова remark – замечание).
Слово REM может стоять только в начале строки, а символ апострофа устанавливается как в начале строки, так и внутри нее. В редакторе VBA комментарии выделяются другим цветом.
Символ апострофа можно использовать для перевода в разряд комментариев, отдельных строк кода программы с целью проверки ее работоспособности.
Пробелы, символы табуляции и пустые строки также не влияют на ход выполнения программы, поэтому они используются в качестве элементов форматирования, чтобы сделать программу более удобной для чтения и восприятия.
Добавляя пустые строки, можно визуально разделить функционально различные фрагменты кода. Использование отступов подчеркивает зависимость одного выражения от другого.
41
В целом, основные правила языка VBA сводятся к следующему:
1)VBA не чувствителен к регистру; пробелы, символы табуляции
ипустые строки не влияют на ход выполнения программы;
2)максимальная длина имени переменной, константы или процедуры не должна превышать 255 символов;
3)для обозначения комментария используется одинарная кавычка или команда REM;
4)символьные значения заключаются в двойные кавычки;
5)несколько операторов в одной строке разделяются двоеточиями;
6)для записи выражения в несколько строк используется пробел и следующий за ним символ подчеркивания.
Алфавит VBA
Алфавит – это набор символов, допустимых для использования при программировании. В алфавит VBA входят:
прописные и строчные буквы латинского и русского алфавитов; арабские цифры (от 0 до 9); специальные символы, применяемые в обозначениях операций,
комментариев и т. д.
Спецсимволы и их сочетания представлены в табл. 1.
|
Т а б л и ц а 1 |
|
|
Спецсимволы и их сочетания |
|
|
|
|
Символы |
Область использования |
|
и их сочетания |
||
|
||
|
|
|
+ |
Суммирование в математических выражениях и сцепле- |
|
|
ние строк в строковых выражениях |
|
|
|
|
– |
Операция вычитания |
|
|
|
|
* |
Операция умножения |
|
|
|
|
/ |
Операция деления |
|
|
|
|
\ |
Операция целочисленного деления |
|
|
|
|
^ |
Операция возведения в степень |
|
|
|
|
() |
Части сложных выражений |
|
|
|
|
= |
Оператор присваивания или знак равенства, применяе- |
|
|
мый в логических выражениях |
|
|
|
42
|
О к о н ч а н и е т а б л . 1 |
|
|
|
|
Символы |
Область использования |
|
и их сочетания |
||
|
||
|
|
|
& |
Операция сцепления подстрок в строку (конкатенация) |
|
|
|
|
‘ |
Комментарий |
|
|
|
|
Знак |
Разрыв строки исходного кода программы или связки |
|
подчеркивания |
в идентификаторах |
|
|
|
|
> |
Операция «больше» |
|
|
|
|
< |
Операция «меньше» |
|
|
|
|
<= |
Операция «меньше» или «равно» («не больше») |
|
|
|
|
>= |
Операция «больше» или «равно» («не меньше») |
|
|
|
|
<> |
Операция «не равно» |
|
|
|
|
Пробел |
Разделитель слов (операторов) в языке |
|
|
|
Из символов, входящих в состав алфавита, составляются имена элементов программы. Прописные и строчные буквы не различаются. Некоторые имена являются зарезервированными и имеют строго определенное назначение, применять их в других целях недопустимо.
Типы данных
Тип данных относится к самым основополагающим понятиям языка программирования. Он служит характеристикой данных, которая определяет их структурную организацию, набор допустимых операций над данными, объем памяти, требуемый для хранения данных, диапазон возможных значений данных и их внешнее представление.
Тип данных указывается при объявлении переменных и в дальнейшем является их атрибутом, т. е. неотъемлемым свойством. Переменная – это область памяти для хранения данных определенного типа, обращение к которой осуществляется по имени или по адресу расположения данных. При определении типа данных операции, разрешенные над ним, не указываются и подразумеваются неявно.
Операции над данными проверяются уже на этапе компиляции (перевода программы в машинные коды), недопустимые операции не
43
компилируются. Это позволяет исключить ошибки и повысить надежность программ.
В зависимости от того, как устроены данные, всю совокупность типов можно условно разделить на простые (встроенные, или базовые) типы и сложные производные, или структурные, типы, которые конструируются из базовых типов. У простых (скалярных) типов возможные значения данных едины и неделимы.
Производные (структурные) типы служат в качестве характеристики более сложных совокупностей данных, составленных из простых.
Базовые типы данных встроены в язык программирования и используются при описании простейших данных, таких как целые числа, символы, логические значения и т. д. Эти типы известны компилятору, и память под них выделяется в соответствии с указанным типом.
Из базовых типов можно создавать сложные структурные типы, которые характеризуют уже не элементарные данные, а более сложные совокупности данных, составленные из простых.
В зависимости от того, в какой момент выделяется память под данные, типы данных подразделяются на статические и динамические. Память под данные статического типа отводится в момент объявления переменных в соответствии с указанным типом. Обращение к данным такого типа производится по имени переменной. Память отводится под переменную данного типа и не может быть освобождена и использована для других целей.
Память под данные динамического типа заранее не известна, выделяется в процессе выполнения программы и может быть в любой момент освобождена и использована по другому назначению. Обращение к данным динамического типа производится не по имени (его не существует), а по адресу расположения данных.
Некоторые языки программирования (например, такие как Паскаль) являются строго типизированными. Они обеспечивают жесткий контроль типов и позволяют обнаруживать ошибки еще на стадии компиляции программы.
Существуют и бестиповые языки программирования, в которых одна и та же переменная по ходу выполнения программы может хранить данные разных типов. Эти языки обеспечивают бо´льшую гибкость программ за счет уменьшения их надежности.
VBA относится к языкам, допускающим бестиповость в определенных пределах. В нем есть тип Variant, который является примером обобщающего типа.
44
Простые типы данных
VBA содержит 12 встроенных простых типов данных, описания которых приведены в табл. 2.
Т а б л и ц а 2
|
Простые типы данных языка VBA |
|
|
Тип |
Описание и возможные значения |
|
|
Boolean |
Логический (True, False) |
|
|
Byte |
Байт – целое число (от 0 до 255) |
|
|
Integer |
Целое число (от –32 768 до 32 767) |
|
|
Long |
Длинное целое (от –2 147 483 648 до 2 147 483 647) |
|
|
Decimal |
Десятичное, примерно 30 десятичных цифр |
|
|
Single |
Число с плавающей запятой одинарной точности |
|
|
Double |
Число с плавающей запятой двойной точности |
|
|
Currency |
Денежный – число с фиксированной десятичной точкой |
|
|
String |
Строка символов |
|
|
Date |
Дата (от 1 января 100 года до 31 декабря 9999 года) |
|
|
Object |
Объект – ссылка на объект (указатель) |
|
|
Variant |
Универсальный (принимает значения любого типа) |
|
|
Операнды, операции и выражения
Элементы данных, над которыми выполняется какое-либо действие, называются операндами. Действия над операндами обозначаются соответствующими знаками операций. Например, в выражении 1+2 числа 1 и 2 – операнды, а знак + определяет операцию сложения.
Операции – это элементарные действия над данными. В VBA операции выполняются в соответствии с их приоритетами. Список допустимых операций и их приоритеты показаны в табл. 3.
45
|
Т а б л и ц а 3 |
|
Операции и их приоритеты |
|
|
|
|
|
Операция |
|
Приоритет |
|
|
|
Вызов функции и выражения в скобках |
|
1 |
|
|
|
^ (возведение в степень) |
|
2 |
|
|
|
- (смена знака числа) |
|
3 |
|
|
|
* (умножение), / (деление), \ (целочисленное деление), |
|
4 |
Mod (деление по модулю, нахождение остатка от деления) |
|
|
|
|
|
+ и – (сложение и вычитание) |
|
5 |
|
|
|
<, >, >=, <=, <>, = (операции отношения: меньше, больше, |
|
6 |
больше или равно, меньше или равно, не равно, равно) |
|
|
|
|
|
Not (логическая операция отрицания) |
|
7 |
|
|
|
And (операция логического сложения) |
|
8 |
|
|
|
Or (операция логического умножения) |
|
9 |
|
|
|
Xor (поразрядная логическая операция Исключающее ИЛИ) |
|
10 |
|
|
|
Операции, имеющие высший приоритет, выполняются первыми. Операции, имеющие одинаковый приоритет, выполняются в соответствии с правилом ассоциативности (слева направо или в обратном порядке).
Операции не только задают действия, выполняемые над операндами, но и служат для формирования и вычисления выражений.
Под выражением понимается комбинация операндов, знаков операций, а также скобок. Выражения задают последовательность действий, но не являются законченными предложениями языка.
Каждое выражение предназначено для получения некоторого значения, например, выражение (2+3)/2 служит для получения среднего значения операндов 2 и 3. Выражения, заключенные в круглые скобки, имеют более высокий приоритет и вычисляются в первую очередь.
Виды операций
Среди множества операций можно выделить математические и логические операции, операции отношения и операции работы со строками.
46
Математические операции применяют для записи формул, представляющих собой отдельные операторы и служащие для вычисления новых значений. К основным математическим операциям относятся операции сложения, вычитания, умножения и деления, обозначаемые знаками +, –, *, /.
Остальные математические операции считаются дополнительными и применяются в специальных математических формулах и при обработке текстовой информации.
К дополнительным математическим операциям относятся операция целочисленного деления, обозначаемая знаком \ ; операция возведения в степень, обозначаемая знаком ^, и операция Mod нахождения остатка от деления.
Например, с помощью дополнительных математических операций можно сформировать следующие операторы:
1)X=5\2, результат X=2 (целая часть от деления);
2)X=5 Mod 2, результат X=1 (остаток от деления);
3)X=2^3, результат X=8 (возведение в степень).
Операции отношения (сравнения) относятся к простейшим логическим операциям и применяются для записи условных выражений, результатом выполнения которых может быть только два значения – True (Истина) или False (Ложь). Например, результатом вычисления выражения 2<3 будет значение True, а результатом выражения 3<2 – значе-
ние False.
С помощью специальных логических операций, таких как И, ИЛИ, НЕ, Исключающее ИЛИ, формируются более сложные конструкции – логические выражения, результатом выполнения которых также являются два значения: True или False.
Например, с помощью логических операций И, ИЛИ, НЕ, Исключающее ИЛИ, обозначаемых соответственно ключевыми словами AND, OR, NOT, XOR, можно определить выражения:
1)X=2<3 AND 3>2, результат X=True ;
2)X=2>3 OR 3>2, результат X=True ;
3)X= NOT 2>3, результат X=True ;
4)X=2<3 XOR 3>2, результат X=False.
Операция И (логическое умножение), обозначаемая ключевым словом AND, дает результат True только в том случае, если оба операнда имеют значение Истина, в остальных случаях результатом этой операции является значение Ложь.
Операция ИЛИ (логическое сложение) обозначается ключевым словом OR и дает результат True в тех случаях, когда хотя бы один из
47
операндов имеет значение Истина, в иных случаях результатом этой операции является значение Ложь.
В отличие от других логических операций операция отрицания НЕ (логическое отрицание), обозначаемая как NOT, является унарной операцией, т. е. операцией над одним операндом. Ее результатом будет значение True в том случае, если операнд имеет значение Ложь. И наоборот, если операнд имеет значение Ложь, то операция NOT дает значение Истина.
Операция Исключающее ИЛИ, обозначаемая ключевым словом XOR, дает значение Истина только в том случае, если операнды имеют различные значения. Если операнды имеют одинаковые значения, результатом операции XOR будет значение Ложь.
Для работы со строками в VBA есть только одна операция – операция объединения строк. Ее еще называют операцией конкатенации и обозначают символом &. С ее помощью можно определить оператор, служащий для объединения строк, например:
X="Миру" & "мир"
Результатом такой операции будет строка «Миру мир». Операция объединения строк может быть также обозначена знаком +.
Переменные и константы
В VBA, как и в других языках программирования высокого уровня, для хранения каких-либо значений в оперативной памяти ЭВМ используют переменные и константы.
Переменные и константы характеризуются типом, который определяет, какого рода данные они будут хранить. Создавая или объявляя переменные и константы, нужно определить и их тип.
Переменная – это область памяти, отводимая под данные определенного типа и используемая для хранения значений, которые можно изменять в ходе выполнения программы.
Переменные можно разделить на простые и индексированные. Простые переменные содержат неделимые данные. Индексированные переменные определяют совокупности однотипных данных. Кроме имени такие переменные имеют и индекс, указывающий порядковый номер элемента в общей структуре. Индексированными переменными являются элементы массивов.
Константа – это значение в программе, которое при выполнении программы нельзя изменять. Их применяют для защиты информации
48
от изменений, для однократного изменения в программе часто используемых значений и для улучшения читаемости кода.
Константы можно использовать в качестве аргументов процедур, в математических операциях, операциях сравнения и пр.
Константы бывают литеральными и именованными.
Числа, строки, даты, используемые непосредственно в коде, без их предварительного объявления, представляют собой литеральные константы.
Именованные константы объявляются в модулях или процедурах. В VBA константы определяются с помощью ключевого слова
Const, например:
Public Const PI As Single=3.14
Здесь ключевое слово Public определяет область видимости костанты – все приложение.
Константами могут быть числа, строки, даты, логические значения. Значения дат при определении констант следует обрамлять знаками #. Пример:
Const D2 As Date=#2/1/2010#
Const D3 As Date=#3/1/2010#
MsgBox ("В феврале " & (D3 - D2) & " дней")
Строковые константы заключаются в двойные кавычки, причем для пустой строки указываются только двойные кавычки, без пробелов между ними. Пример:
Const AB As String="Проверка"
Константы типа Boolean могут иметь только два значения – True и False. Значения этих констант нельзя брать в кавычки или сокращать. Пример:
Const T As Boolean=True.
Для удобства чтения и понимания программ имена констант (для отличия их от имен переменных) рекомендуется записывать прописными буквами. В именах переменных можно использовать как прописные, так и строчные буквы.
На имена переменных и констант накладываются определенные ограничения. Так, имя переменной или константы обязательно должно начинаться с буквы. В составе имени нельзя использовать символы: !, @, &, $, # и символ пробела. В качестве имени нельзя использовать
49
ключевые слова VBA. Имя не должно иметь повторов в пределах его действия. Длина имени ограничена 255 символами.
Область действия переменных и констант определяется с помощью ключевых слов: Private, Public и Static.
Private – область действия в пределах конкретного модуля. После завершения выполнения модуля память, отведенная под эти переменные, освобождается.
Public – область действия в пределах всего приложения.
Static – область действия в пределах конкретного модуля и внешних процедур, используемых в данном модуле. После завершения выполнения модуля значения этих переменных сохраняются и могут быть использованы при повторном выполнении модуля.
Переменные и константы, в зависимости от области действия, подразделяются на глобальные и локальные.
Если переменная или константа описана внутри процедуры, то она является локальной, т. е. она определена и может использоваться только в пределах данной процедуры.
Если переменная или константа описана вне процедуры, то она будет глобальной. Такая переменная или константа может быть использована в нескольких процедурах.
Переменная объявляется с использованием ключевых слов: Private, Public, Static, Dim. Для указания типа переменной используется ключевое слово As. Если оно опущено, то переменной присваивается тип
Variant.
Числовой переменной по умолчанию присваивается нулевое значение.
Примеры объявления числовых переменных:
Dim X As Integer
Dim Y As Single
Пример объявления строковой переменной:
Dim St As String
Примеры объявления массивов:
Dim М(12) As Integer Dim N(1 to 20) As Single
Dim R(1 to 5, 1 to 7) As Integer
Переменные и константы, объявленные как Private, сохраняют свое значение только во время выполнения блока кода, в котором они определены.
50
