Урок 3 VBA Excel для автоматизации: переменные, типы данных и диалоговые окна
Содержание
Приветствуем вас на Уроке 3. Итак, хотите выйти за пределы простой записи макросов? Сегодня мы более пристально заглянем «под капот» Excel и научимся основам программирования на VBA (Visual Basic for Applications — упрощенная версия языка программирования «Бейсик»). Это откроет вам возможность создавать по-настоящему мощные макросы! И если вы ещё не изучили предыдущий материал, перед тем как двинуться вперёд, рекомендуем сделать это, внимательно изучив и сделав все задания предшествующих уроков:
Урок 1 Введение в макросы Excel: что это и зачем нужно
Урок 2 Как запускать макросы: 3 удобных способа, настройка кнопок и горячих клавиш
Пишем код простого макроса
Итак, давайте теперь напишем (а не запишем как мы делали на предыдущих уроках) макрос с помощью редактора кода. Чтобы попасть в редактор кода, зайдите во вкладку «Разработчик» и нажмите на кнопку Visual Basic.
Должен открыться редактор:
Если сам редактор VBA открылся, но в нём нет окошка для ввода кода, как можно видеть на скрине, то нажмите View → Code.
Итак, всё готово для дальнейшей работы. Давайте напишем следующий код, и после мы разберёмся с тем, как он работает. Вместо числа 30, напишите ваш возраст (или можете оставить 30):
Sub ПростойМакрос() Dim age As Integer age = 30 MsgBox "Мне " & age & " лет" End Sub
Что должно получиться:
Теперь переключитесь обратно в Excel, нажав на соответствующий значок:
И далее, вспомнив урок 2, вы запустите макрос по имени ПростойМакрос. В результате его запуска вы должны увидеть окно с сообщением:
Если вы поменяли число 30 на свой возраст, то вы увидите ваш вариант числа.
Давайте посмотрим на код ещё раз, но уже с комментариями. Комментарии — это любая заметка программиста, которую он оставил для себя или других, а не для VBA. Программа «не видит» комментарий. Пишется он после одиночной кавычки:
Sub ПростойМакрос() Dim age As Integer ' Объявление переменной age = 30 ' Присваивание значения переменной MsgBox "Мне " & age & " лет" ' Вывод результата End Sub
Итак, разберём как работает этот код:
- Код макроса заключается между двумя строками, в первой пишется команда Sub и через пробел имя макроса с 2-мя скобками. Во-второй строчке (точнее она самая последняя) пишем End Sub.
- С помощью команды (или инструкции) Dim объявляется переменная для хранения данных целого типа (As Integer). Имя этой переменной — age.
- С помощью команды присваивания (=) в переменную age записывается значение 30.
- Команда MsgBox выводит на экран диалоговое окно с текстом. А сам текст составлен из трех отдельных строк: "Мне ", содержимого переменной age (которое автоматически преобразовалось в строку) и строки " лет". Как вы, наверное знаете, оператор & в Excel объединяет строки: не только в коде макросов, но и в формулах, применяемых в ячейках Excel.
Давайте теперь, когда мы посмотрели на практике как можно написать макрос, изучим некоторые важные теоретические данные.
Переменные в VBA
Переменная — это «контейнер» для хранения данных, имеющий определенное имя.
Зачем нужны переменные:
- Для хранение промежуточных результатов;
- Упрощения сложных вычислений;
- Повышения читаемости кода (и здесь важную роль играет понятное, само за себя говорящее, название переменной).
Обычно для переменных принято определять тип данных, чтобы более чётко определить как эта переменная будет работать.
Основные типы данных
Тип данных | Пример объявления | Описание |
---|---|---|
Integer | Dim x As Integer | Целые числа (–32,768 до 32,767) |
Long | Dim bigNum As Long | Целые числа (–9,22·1018 до 9,22·1018) |
Double | Dim price As Double | Числа с плавающей точкой |
String | Dim name As String | Текст (до 2 млрд символов) |
Boolean | Dim isDone As Boolean | True/False |
Date | Dim today As Date | Дата и время |
Variant | Dim anything | Универсальный тип |
Математические операторы
Используются стандартные математические операторы, скобки, различные функции. В этом цикле уроков нам понадобятся основные:
Dim result As Double result = 5 + 3 * 2 - 3 ' = 8 (умножение, сложение, вычитание) result = (5 + 3) * 2 ' = 16 (скобки меняют порядок) ' Деление: result = 10 / 3 ' = 3.333... (обычное деление) result = 10 \ 3 ' = 3 (целочисленное деление - отбрасывает дробную часть) result = 10 Mod 3 ' = 1 (остаток от деления) result = 2 ^ 4 ' = 16 (степень)
Процедуры и Функции
Sub (процедура) — выполняет действия. В примере выше мы таким образом определили макрос, задав его имя ПростойМакрос и с помощью последовательности команд описали, что он должен делать.
Function (функция) — возвращает значение. Функция может быть вызвана из другой функции или процедуры. Она не выполняется сама по себе, то есть если она описана в коде, но нет явного указания её вызова — она ни разу не будет запущена. Функция не может быть запущена как макрос. Завершение кода функции определяется командой «End Function».
Например, рассмотрим такой код:
Function Sum(a As Double, b As Double) As Double Sum = a + b End Function Sub Test() Dim total As Double total = Sum(5, 3.5) MsgBox "Сумма чисел =" & total End Sub
Чтобы вам было понятнее зайдите в редактор кода и попробуйте самостоятельно ввести этот код. Для лучшего освоения материала лучше сразу применять на практике теорию.
После запуска этого макроса вы увидите такое окно:
Как вы, скорее всего, догадались, глядя на код — вызов функции произошёл вот в этой строчке:
total = Sum(5, 3.5)
В результате чего, функция Sum, согласно её алгоритму сложила два числа: 5 и 3.5, а затем вернула результат, который тут же был сохранён в переменной total.
Домашнее задание
Напишите код макроса, который:
- Запрашивает у пользователя сумму и процент.
- Возвращает сумму, увеличенную на размер этого процента.
Подсказка 1
Для запроса значений суммы и процента используйте функцию InputBox, которая открывает диалоговое окно, выводит заданный в качестве аргумента функции текст и поле для ввода значений.
userInput = InputBox("Введите сумму:")
Подсказка 2
Для преобразования значения текстовой переменной в переменную с типом Double используйте специальную функцию CDbl
OutputDouble = CDbl(InputString)
На следующем уроке
- Узнаем как работать с ячейками Excel прямо из макроса;
- Научим макрос принимать решение с помощью операторов условий;
- Узнаем 3 формы оператора If...Then;
- Определимся, когда использовать Select Case вместо множества If;
- Сделаем интересные практическое задание;
- Разберем пример решения домашней задачи этого урока.
Есть вопросы? Пишите в комментариях. Сделали домашнее задание — обязательно сообщите об этом в комментариях!
Следующий урок: Урок 4 Как заставить Excel думать: работа с условиями в VBA
Вступайте в наше сообщество ВК ustanovkaos_ru, чтобы не пропустить выход следующих уроков!