Публикация Школы траблшутеров

Как учиться макросам на VBA?

Время чтения: 6 мин 40 сек
21 октября 2025 г. Просмотров: 105

Обучение, Microsoft Excel | Олег Брагинский, Максим Мухтаров

Основатель «Школы траблшутеров» Олег Брагинский и ученик Максим Мухтаров рассказывают, как составить план эффективного изучения языка Visual Basic for Applications, позволяющего писать прикладные макросы – полезные программы в приложениях Microsoft Office.

Преподавание требует тщательной подготовки материала: позиционирования темы в учебном плане, структурирования содержания курса, формирования последовательности изложения, подбора практичных примеров, перечисления сторонних ссылок, фиксации принятых соглашений.

В Школе траблшутеров навыки делятся на инструментальные и фундаментальные. «Эффективные макросы на VBA», располагаясь в ветке «Практика» и программе «Концептолог», относится к первым, однако для достижения максимальной пользы следовало привнести черты вторых.

Изучая программирование впервые, обучающийся не только овладевает конкретным средством решения задач, но и развивает новый способ мышления. Поэтому важно грамотно увязывать и раскрывать через практику теоретические концепции, преподаваемые в технических вузах.

VBA – язык общего назначения, тесно связанный с приложением Office в качестве среды исполнения. Предоставляя возможность создания макросов, Microsoft превращает пользователей в разработчиков, привязывающих заказчиков к корневому продукту расширением функционала.

Предметно-ориентированные языки в курсе затрагивались на уровне, достаточном для отработки задач-примеров: XML – редактирование внутренней структуры офисных файлов, HTML – парсинг веб-страниц, приходящих в ответе на HTTP-запрос, SQL – обращение к базам данных.

В процессе программирования выделяют стадии: а) проектирования; б) кодирования; в) исполнения – с отладкой, тестового, промышленного. Вследствие отсутствия консенсуса среди учёных-информатиков договоримся, что парадигма определяет подход к первому или второму этапу.

Проектирование закрепляет способ задания алгоритма исполнителю, который выражается ответом на вопрос: а) как нужно сделать – императивная парадигма, б) что получить в результате – декларативная. VBA относится к первому типу. Примером языка второй группы служит SQL.

В рамках императивной парадигмы для VBA значимы следующие подвиды:

  • структурная
  • процедурная
  • объектно-ориентированная
  • событийно-ориентированная.

К VBA применима теорема Бёма-Якопини: код структурируем в виде последовательностей инструкций, операторов цикла и ветвления. Однако безусловный переход, не любимый Эдсгером Дейкстрой, незаменим в реализации аналога try-catch конструкции через On Error GoTo <Label>.

Программа на VBA состоит из процедур и функций. Последние отличаются от первых необходимостью возвращать результат в точку вызова. Код располагается в поддерживающих импорт и экспорт модулях: а) обычных, б) классов, 3) форм, 4) объектов приложения Office.

VBA не считается полноценным объектно-ориентированным языком. Поддерживая двух «китов» подпарадигмы: инкапсуляцию через управление областью видимости членов класса и полиморфизм с помощью имплементации интерфейсов, не обеспечивает третьего – наследования.

VBA поддерживает события – пользовательские действия, приводящие к запуску макроса. Перед закрытием книги можно выставлять листам единый масштаб, по выбранной ячейке открывать Word-файл на нужной странице, при вводе значения в элемент TextBox выдавать сообщение об ошибке.

По второй стадии программирования редактор кода реализует текстовую парадигму, а форм – визуальную: не требуется использовать язык разметки. Окружение позволяет менять свойства окна, добавлять и располагать элементы управления: рамки, вкладки, кнопки, списки, метки.

Структура курса охватывает: а) среду разработки и исполнения, б) изучение языковых средств. Первый раздел рассматривает кодирование и запись макросов, запуск и настройки в интерфейсе приложения. Второй – объявления, операторы, операции, а также классы релевантных библиотек.

В базовой программе последовательно излагались темы:

  1. Кастомизация ленты и создание надстроек.
  2. Работа с пользовательскими формами и события.
  3. Взаимодействие с файлами: библиотека Scripting Runtime.
  4. Использование возможностей операционной системы: Windows API.
  5. Организация юнит-тестов и публичные функции, запускаемые на листах.
  6. Изучение классов объектной библиотеки Excel: Range, Worksheet, Workbook.
  7. Взаимодействие с MS SQL Server Express через ADODB, запросы к книге как СУБД.
  8. Проектирование классов и интерфейсов, парсинг сайтов с помощью MSXML2, MSHTML.

При высоком темпе освоения или подготовленности группы предусмотрели разделы:

  1. Динамизация форм.
  2. Изучение дополнительных классов Excel.
  3. Введение в объектные модели Word, Power Point, Outlook.

Рекомендованная литература знакомила с широко известными подходами: «Чистый код» Роберта Мартина – читаемость программ, «Экстремальное программирование» Кента Бэка – разработка через тестирование, «Паттерны проектирования» Эрика Гаммы и др. – усвоение идей о классах.

Ссылки включали: а) официальную документацию от Microsoft по языку макросов и библиотекам функций операционной системы; б) сторонние ресурсы: иконки для кастомизации ленты, сопоставление типов данных между языком VBA и Windows API, строки подключения к СУБД.

Соглашения охватывали: а) наименования – переменных, констант, процедур, функций, классов, интерфейсов, форм, элементов управления; б) организацию кода – внутри и между модулями с выделением типовых – например, под юнит-тесты, для кнопок на ленте, с вызовами API Windows.

Ученики отмечали: а) одну задачу можно решить несколькими вариантами макросов или выбрать стандартную функциональность; б) момент, когда вырастает сложность материала, наступает незаметно; в) рефакторинг повышает читаемость, но замедляет разработку и исполнение.

Чтобы освоить инструментальный навык, изученное должно оказываться «на кончиках пальцев». Простого перепечатывания вслед за преподавателем или по высланному файлу недостаточно. Желательно изучать справку и задаваться вопросами: почему сделали так и каковы альтернативы.

Опасение вызывали отсутствие развития языка с 2010 года и наличие новых технологий. Заверили: Microsoft не объявляла о планах прекратить поддержку, хотя Office Scripts существуют с 2020, а приход ИИ не избавил от необходимости разбираться, как работают сотни корпоративных макросов.

Составление курса полезно специалисту: в попытке предугадать реакцию аудитории знания растут вширь и вглубь. Анекдотичность ситуации «столько раз объяснял, что сам понял» уже не вызывает улыбки. Практика отрезвляет ледяным фактом: одно дело сказку слушать, другое – читать.