Лекция 6. Основы программирования на vba
Ввод кода vba
Код VBA состоит из инструкций. Обычно каждая инструкция вводится на отдельной строке. Можно перенести длинную инструкцию на следующую строку с помощью оператора продолжения строки, который состоит из пробела и знака подчёркивания.
После ввода инструкции редактор VBA выполняет следующие действия.
Вставляет пробелы между операторами и операндами.
Изменяет регистр символов ключевых слов, свойств, методов и переменных.
Проверяет инструкцию на наличие синтаксических ошибок. При обнаружении ошибки изменяется цвет строки и выдаётся сообщение об ошибке. Чтобы сообщения об ошибках не отображались, что бывает слишком навязчиво, можно снять флажок Auto Syntax Check, который находится на вкладкеEditorв диалоге установки параметров редактора VBA (ToolsOptions).
Комментарии
Комментарий– это часть программы, которая игнорируется компилятором. Комментарии обычно используются для записи пояснений к тексту программы, предназначенных для программиста. Комментариями в VBA считается часть строки, начинающаяся с апострофа.
Используйте комментарии:
для описания назначений переменных;
для краткого описания назначения каждой процедуры и функции;
для описания изменений, которые были внесены в процедуру или функцию;
для указания функции или конструкции, использующейся нестандартным способом.
Типы данных
Тип является характеристикойпеременной, которая определяет:
какие данные могут храниться в переменной;
какие операции могут выполняться над переменной;
размер ячейки памяти для переменной.
Тип |
Хранимые данные |
Операции |
Boolean |
Логические значения True и False |
Логические – not, and, or |
Byte |
Целые числа в диапазоне 0..255 |
Арифметические – -, ^, *, /, \, mod, +, - Отношения – =, <>, >, >=, <, <= |
Integer |
Целые числа в диапазоне -32768..32767 | |
Long |
Целые числа в диапазоне -2147483648..2147483647 | |
Single |
Вещественные числа, от -3.402823E38 до -1.401298E-45 для отрицательных значений и от 1.401298E-45 до 3.402823E38 для положительных значений | |
Double |
Вещественные числа, от-1.79769313486231E308 до -4.94065645841247E-324 для отрицательных значений и от 4.94065645841247E-324 до 1.79769313486232E308 для положительных значений | |
Currency |
Вещественные числа в диапазоне от -922,337,203,685,477.5808 до 922,337,203,685,477.5807 | |
Date |
Значения даты и времени в диапазоне от 1 января 100 года до 31 декабря 9999 года |
Арифметические (вычитание) DateAdd DateDiff DatePart DateValue |
String |
Строки длиной до 2 млрд. символов |
Конкатенация – & Отношения |
Variant |
Значения любого типа |
Зависит от реального типа данных |
Для проведения математических вычислений в рабочих листах приложения MicrosoftExcelиспользует типDouble. Его же рекомендуется применять и для обработки вещественных чисел в VBA для обеспечения той же точности вычислений. При управлении номерами строк рабочих листов следует применять тип данныхLong, т.к. количество строк в рабочем листе превышает максимальное значение, хранимое переменной типаInteger.
Тип Variantпредставляется удобным, но у него есть ряд недостатков. Во-первых, переменные типаVariantтребуют больше памяти. Во-вторых, работа с переменными типаVariantтребует больше времени – примерно в 3 раза. В-третьих, использование конкретных типов позволяет компилятору раньше находить ошибки, связанные с неверными типами данных, а также позволяет избегать таких ошибок.
Dim v1 As Variant, v2 As Variant
v1 = "123"
v2 = 45
MsgBox v1 + v2 '168
MsgBoxv1 &v2'12345
Для определения типа данных, хранящихся в переменной типа Variant, используются стандартные функцииVarTypeиTypeName. Первая возвращает число, соответствующее типу данных, а вторая – строку, хранящую имя типа данных.
Dim v As Variant
v = 46.7
MsgBox VarType(v) '5
MsgBox TypeName(v) 'Double
Чтобы не запоминать числа, соответствующие тому или иному типу, в VBA введены константы, имена которых запомнить намного проще – vbBoolean, vbByte, vbInteger, vbLong, vbSingle, vbDouble, vbCurrency, vbDate, vbString, vbArray.
If VarType(v) = vbDouble Then
...
Функция TypeNameудобна тем, что она возвращает в виде строки имена для типов объектов, существующих в VBA, – таких какRange,Worksheet,Workbookи т.д.
Таким образом, тип Variantимеет смысл использовать, только если вы сами хотите разделить обработку данных разных типов.
Переменные типа Variantмогут также хранить ряд специальных значений, таких какEmpty(ничего не присвоено),Null(некорректные данные) иError(признак ошибки). Чтобы создать подобный признак ошибки используется функцияCVErr, получающая в качестве аргумента номер ошибки.
Dim v As Variant
v = CVErr(0)
В VBA определён ряд констант, соответствующих ошибкам, возникающим в формулах.
Константа |
Номер |
Ошибка |
xlErrDiv0 |
2007 |
#ДЕЛ/0! |
xlErrNA |
2042 |
#Н/Д |
xlErrName |
2029 |
#ИМЯ? |
xlErrNull |
2000 |
#ПУСТО! |
xlErrNum |
2036 |
#ЧИСЛО! |
xlErrRef |
2023 |
#ССЫЛ! |
xlErrValue |
2015 |
#ЗНАЧ! |
Если присвоить в переменную типа Variantпризнак ошибки с одним из вышеперечисленных номеров и поместить значение этой переменной в ячейку рабочего листа, в ячейке будет отображаться соответствующее сообщение об ошибке. Всем остальным номерам соответствует сообщение #ЗНАЧ!. С их помощью можно создавать как пользовательские сообщения об ошибках.