Всё об операционных системах — подробное руководство для пользователей операционных систем

Урок 3 VBA Excel для автоматизации: переменные, типы данных и диалоговые окна

Приветствуем вас на Уроке 3. Итак, хотите выйти за пределы простой записи макросов? Сегодня мы более пристально заглянем «под капот» Excel и научимся основам программирования на VBA (Visual Basic for Applications — упрощенная версия языка программирования «Бейсик»). Это откроет вам возможность создавать по-настоящему мощные макросы! И если вы ещё не изучили предыдущий материал, перед тем как двинуться вперёд, рекомендуем сделать это, внимательно изучив и сделав все задания предшествующих уроков:

Урок 1 Введение в макросы Excel: что это и зачем нужно

Урок 2 Как запускать макросы: 3 удобных способа, настройка кнопок и горячих клавиш

Пишем код простого макроса

Итак, давайте теперь напишем (а не запишем как мы делали на предыдущих уроках) макрос с помощью редактора кода. Чтобы попасть в редактор кода, зайдите во вкладку «Разработчик» и нажмите на кнопку Visual Basic.

входим в VBA

Должен открыться редактор:

редактор VBA

Если сам редактор VBA открылся, но в нём нет окошка для ввода кода, как можно видеть на скрине, то нажмите View → Code.

view code

Итак, всё готово для дальнейшей работы. Давайте напишем следующий код, и после мы разберёмся с тем, как он работает. Вместо числа 30, напишите ваш возраст (или можете оставить 30):

Sub ПростойМакрос()
   Dim age As Integer
   age = 30
   MsgBox "Мне " & age & " лет"
End Sub

Что должно получиться:

простой макрос

Теперь переключитесь обратно в Excel, нажав на соответствующий значок:

как вернуться в excel

И далее, вспомнив урок 2, вы запустите макрос по имени ПростойМакрос. В результате его запуска вы должны увидеть окно с сообщением:

результат работы макроса

Если вы поменяли число 30 на свой возраст, то вы увидите ваш вариант числа.

Давайте посмотрим на код ещё раз, но уже с комментариями. Комментарии — это любая заметка программиста, которую он оставил для себя или других, а не для VBA.  Программа «не видит» комментарий. Пишется он после одиночной кавычки:

Sub ПростойМакрос()
   Dim age As Integer ' Объявление переменной
   age = 30 ' Присваивание значения переменной
   MsgBox "Мне " & age & " лет" ' Вывод результата
End Sub

Итак, разберём как работает этот код:

  1. Код макроса заключается между двумя строками, в первой пишется команда Sub и через пробел имя макроса с 2-мя скобками. Во-второй строчке (точнее она самая последняя) пишем End Sub.
  2. С помощью команды (или инструкции) Dim объявляется переменная для хранения данных целого типа (As Integer). Имя этой переменной — age.
  3. С помощью команды присваивания (=) в переменную age записывается значение 30.
  4. Команда MsgBox выводит на экран диалоговое окно с текстом. А сам текст составлен из трех отдельных строк: "Мне ", содержимого переменной age (которое автоматически преобразовалось в строку) и строки " лет". Как вы, наверное знаете, оператор & в Excel объединяет строки: не только в коде макросов, но и в формулах, применяемых в ячейках Excel.

Давайте теперь, когда мы посмотрели на практике как можно написать макрос, изучим некоторые важные теоретические данные.

Обязательно делайте комментарии, когда пишете код, чтобы в будущем, при его редактировании, быстро вникнуть в суть.

Переменные в VBA

Переменная — это «контейнер» для хранения данных, имеющий определенное имя.

Зачем нужны переменные:

  • Для хранение промежуточных результатов;
  • Упрощения сложных вычислений;
  • Повышения читаемости кода (и здесь важную роль играет понятное, само за себя говорящее, название переменной).

Обычно для переменных принято определять тип данных, чтобы более чётко определить как эта переменная будет работать.

Основные типы данных

Тип данныхПример объявленияОписание
IntegerDim x As IntegerЦелые числа (–32,768 до 32,767)
LongDim bigNum As LongЦелые числа (–9,22·1018 до 9,22·1018)
DoubleDim price As DoubleЧисла с плавающей точкой
StringDim name As StringТекст (до 2 млрд символов)
BooleanDim isDone As BooleanTrue/False
DateDim today As DateДата и время
VariantDim 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. Запрашивает у пользователя сумму и процент.
  2. Возвращает сумму, увеличенную на размер этого процента.

Подсказка 1

Для запроса значений суммы и процента  используйте функцию InputBox, которая открывает диалоговое окно, выводит заданный в качестве аргумента функции текст и поле для ввода значений.

userInput = InputBox("Введите сумму:")

Подсказка 2

Для преобразования значения текстовой переменной в переменную с типом Double используйте специальную функцию CDbl

OutputDouble = CDbl(InputString)

На следующем уроке

  • Узнаем как работать с ячейками Excel прямо из макроса;
  • Научим макрос принимать решение с помощью операторов условий;
  • Узнаем 3 формы оператора If...Then;
  • Определимся, когда использовать Select Case вместо множества If;
  • Сделаем интересные практическое задание;
  • Разберем пример решения домашней задачи этого урока.

Есть вопросы? Пишите в комментариях. Сделали домашнее задание — обязательно сообщите об этом в комментариях!

Следующий урок: Урок 4 Как заставить Excel думать: работа с условиями в VBA

Вступайте в наше сообщество ВК ustanovkaos_ru, чтобы не пропустить выход следующих уроков!

Adblock
detector