Слайд 1Основы программирования на VBA
Элементы языка VBA
Слайд 2Комментарии
Комментарий — это описательный текст, который включается в код. VBA
полностью игнорирует текст комментария. Комментарии используют для описаний действий в
коде (т.к. предназначение оператора не всегда очевидно). Можно использовать для комментария новую строку либо вставить комментарий после инструкции в той же строке. Комментарий обозначается апострофом. VBA игнорирует любой текст, введенный после апострофа — за исключением случаев, когда апостроф заключен в кавычки.
Слайд 3Переменные, типы данных и константы
Переменная представляет собой именованное место хранения
данных в памяти компьютера. Переменные могут содержать данные разных типов
— от простых логических, или булевых, значений (True или False) до больших значений с двойной точностью
Слайд 4Несколько правил, ограничивающих именование переменных.
Можно использовать в названиях символы
букв, числа и некоторые знаки препинания, но первой в имени
переменной всегда должна вводиться буква.
VBA не различает регистры. Чтобы сделать имена переменных удобочитаемыми, часто используют смешанный регистр (например, InterestRate , а не interestrate).
Слайд 5Нельзя использовать в именах пробелы или точки. Чтобы сделать имена
переменных более удобными для чтения, вводится символ подчеркивания.
Специальные символы объявления
типов (#, $, %, & или I) также не применяются в имени переменной.
Названия переменных ограничены длиной 254 символов.
Названия переменных не должны совпадать с зарезервированными словами (названиями методов, функций и т.п.)
Слайд 6Встроенные типы данных VBA.
VBA автоматически обрабатывает любые типы данных. VBA
может автоматически типизировать данные, однако это чревато негативными последствиями: медленное
выполнение операций и менее эффективное использование памяти. В результате, позволяя VBA самостоятельно определять типы данных, можно столкнуться с проблемами выполнения больших или сложных приложений.
Слайд 7Пример 1:
Sub VariantDemo1()
MyVar = "123"
MsgBox "Переменная " & MyVar &
" Тип данных: " _
& TypeName(MyVar)
MyVar = MyVar +
MyVar
MsgBox "Результат сложения переменных= " & MyVar _
& " Тип данных: " & TypeName(MyVar)
End Sub
Слайд 8Результатом сложения будет не арифметическое действие над числами а объединение
строк: 123123 и тип данных будет строковым. Потому что знак
сложения применим не только к числовому типу данных, но и к строковому. А изначально тип переменной задавался как строковый.
Слайд 9Пример 2:
Sub VariantDemo2()
MyVar = "123"
MsgBox "Переменная " & MyVar &
" Тип данных: " _
& TypeName(MyVar)
MyVar = MyVar /
2
MsgBox "Результат деления переменной на 2= " & MyVar _
& " Тип данных: " & TypeName(MyVar)
End Sub
Слайд 10Результатом сложения будет арифметическое действие над числами: 61,5 и тип
данных будет определен числовым. Потому что знак деления применим только
к числовому типу данных. И не смотря на то, что изначально тип переменной задавался как строковый, результатом выполнения операции над переменной явился перевод типа данных переменной.
Слайд 11Переменные необходимо объявлять для того, чтобы :
во-первых, экономить каждый байт
памяти;
во-вторых, VBA может выполнять дополнительную проверку ошибок на этапе компиляции
— подобные ошибки довольно сложно выявить другими способами проверки.
Слайд 12Пример 3:
Sub VariantDemo3()
Dim Fam As String
Fam = InputBox("Введите Ваше имя",
_
"Ввод имени пользователя")
MsgBox "Вас зовут " & Fam, vbOKOnly, "Вывод"
End
Sub
Если при объявлении переменной ввести другой тип переменной (например, Double), то выполнение процедуры будет прервано для отладки.
Слайд 13Чтобы грамотно объявлять переменные необходимо хорошо разбираться в типах данных,
приведенных в таблице.
Слайд 17Рекомендуется выбирать тот тип данных, в котором используется минимальное количество
байт для хранения значений, но он также должен быть достаточным
для представления максимальных значений переменных. При работе с данными в VBA скорость выполнения операций зависит от объема данных, которые обрабатываются с помощью VBA. Другими словами, чем меньше байт зарезервировано под данные, тем быстрее VBA получает доступ к данным и обрабатывает их.
Слайд 18Функции конвертирования типов данных.
Некоторые функции VBA конвертируют числа в
строки. К таким функциям относятся следующие.
CStr. Превращает данные любых
типов (кроме типа Object), включая числовые, в соответствующую им строку. Вывод форматируется в соответствии с установками, заданными в панели управления Язык и стандарты Windows.
Str. Конвертирует число в строку, но всегда форматирует строку в соответствии со стандартом английского языка США с точкой в качестве десятичного разделителя.
Слайд 19Функции конвертирования в числовые типы данных переводят строки в соответствующие
числовые значения, но только тогда, когда все символы в строке
распознаются как допустимые для чисел. В данном случае тоже все зависит от установок в панели управления.
Val. Конвертирует числа в строках в числовые значения, останавливаясь там, где встречается первый символ, недопустимый для чисел. Независимо от установок панели управления, распознает только цифры и десятичную точку (а не запятую, например). Однако игнорирует пробелы, символы табуляции и переходы на новую строку.
Слайд 20
Chr. Конвертирует числовой ANSI-код в соответствующий символ. Эта функция используется,
когда в строку нужно поместить символ, который нельзя напечатать.
Asc. Примерно
соответствует обратной к функции Chr —- возвращает числовой код первого символа в строке.
Слайд 21Обязательное объявление всех переменных
Чтобы обеспечить обязательное объявление всех используемых переменных,
необходимо включить следующую строку в качестве первой инструкции (до объявления
процедуры) в модуле VBA:
Option Explicit
Этот оператор отвечает за то, что программа будет приостанавливаться всякий раз при нахождении в ней необъявленной переменной. VBA выведет сообщение об ошибке, и для продолжения выполнения процедуры вы должны будете объявить переменную.
Слайд 22Пример 4:
Option Explicit
Sub VariantDemo4()
Dim Fio As String
Fio = InputBox("Введите Ваше
имя", _
«Ввод имени пользователя")
MsgBox "Вас зовут " & Fio, vbOKOnly,
"Вывод"
End Sub
Если переменную Fio не объявить, то выполнение процедуры прервется и выйдет сообщение об ошибке Compile Error: Variable not defined.
Слайд 23Область действия переменных
Область действия переменной определяет, в каких модулях
и процедурах она может пользоваться. Существуют следующие типы областей действия
переменных.
Слайд 24Локальные переменные
Локальная переменная — это переменная, объявленная в процедуре. Локальные
переменные могут использоваться только в процедуре, в которой они объявлены.
После выполнения процедуры переменная становится невостребованной, поэтому Excel освобождает соответствующую область памяти.
Наиболее популярный способ объявить локальную переменную — вставить оператор Dim (сокращение от Dimension (Размерность)) между операторами Sub и End Sub. Операторы Dim обычно вводятся непосредственно после оператора Sub, перед кодом процедуры.
Слайд 25Переменные уровня модуля
Иногда необходимо, чтобы переменная была доступна во всех
процедурах модуля. В таком случае объявляется переменная перед первой процедурой
модуля (за пределами процедур или функций).
Переменные Static
Переменные Static — особый случай. Они объявляются на уровне процедуры и сохраняют свое значение после окончания процедуры.
Слайд 26Переменные Public
Чтобы сделать переменную доступной во всех процедурах всех модулей
VBA в проекте, необходимо объявить переменную на уровне модуля с
помощью ключевого слова Public , а не Dim:
Public CurrentRate as Long
Ключевое слово Public делает переменную CurrentRate доступной для любой процедуры проекта, даже для процедур, которые располагаются в других модулях проекта. Этот оператор следует вставить перед первой процедурой модуля. Более того, подобный код объявления переменных должен вводиться в стандартном модуле VBA, а не в коде модуля листа или формы.
Слайд 27Работа с константами
Значение переменной может изменяться при выполнении процедуры. Иногда
же необходимо использовать именованное значение или строку, которая никогда не
меняется — константу.
Константы объявляются с помощью оператора Const. Например:
Const NumQuarters as Integer = 4
Const Rate = 0.0725, Period = 12
Во втором примере тип данных не объявлен. Следовательно, указанные две константы имеют тип Variant . Так как константы никогда не изменяют своего значения, обычно их объявляют в виде конкретного типа данных.
Слайд 28Как и переменные, константы также имеют область действия. Если требуется,
чтобы константа была доступна только в одной процедуре, т.е. локальной,
она объявляется после оператора Sub или Function. Чтобы сделать константу доступной для всех модулей рабочей книги, используется ключевое слово Public и константа объявляется перед первой процедурой модуля.
Public Const Per As Double = 0.0725
При попытке изменить значение константы в процедуре VBA выходит сообщение об ошибке. Константа — это постоянное значение, а не переменная.
Слайд 29Операторы присвоения
Оператор присвоения — это инструкция VBA, выполняющая математическое вычисление
и присваивающая результат переменной или объекту. Выражение может осуществлять вычисление,
обрабатывать символы или тестировать данные. В VBA оператором присвоения выступает знак равенства (=).VBA поддерживает операторы сравнения, которые применяются в формулах Excel: равно (=), больше (>), меньше (<), больше или равно (>=), меньше или равно (<=) и не равно ( <> ) .
Слайд 30В VBA операторы играют главную роль. Известные вам операторы описывают
математические операции, в том числе сложение (+), умножение (*), деление
(/), вычитание (—), возведение в степень (^) и конкатенацию строк (&).
Менее знакомые операторы: обратная косая черта (\)— используется в целочисленном делении, оператор Abs — применяется при определении модуля числа. Оператор Mod возвращает остаток от деления одного числа на другое. Например, следующее выражение возвращает 2:
17 Mod 3