Обучение, 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 выдавать сообщение об ошибке.
По второй стадии программирования редактор кода реализует текстовую парадигму, а форм – визуальную: не требуется использовать язык разметки. Окружение позволяет менять свойства окна, добавлять и располагать элементы управления: рамки, вкладки, кнопки, списки, метки.
Структура курса охватывает: а) среду разработки и исполнения, б) изучение языковых средств. Первый раздел рассматривает кодирование и запись макросов, запуск и настройки в интерфейсе приложения. Второй – объявления, операторы, операции, а также классы релевантных библиотек.
В базовой программе последовательно излагались темы:
- Кастомизация ленты и создание надстроек.
- Работа с пользовательскими формами и события.
- Взаимодействие с файлами: библиотека Scripting Runtime.
- Использование возможностей операционной системы: Windows API.
- Организация юнит-тестов и публичные функции, запускаемые на листах.
- Изучение классов объектной библиотеки Excel: Range, Worksheet, Workbook.
- Взаимодействие с MS SQL Server Express через ADODB, запросы к книге как СУБД.
- Проектирование классов и интерфейсов, парсинг сайтов с помощью MSXML2, MSHTML.
При высоком темпе освоения или подготовленности группы предусмотрели разделы:
- Динамизация форм.
- Изучение дополнительных классов Excel.
- Введение в объектные модели Word, Power Point, Outlook.
Рекомендованная литература знакомила с широко известными подходами: «Чистый код» Роберта Мартина – читаемость программ, «Экстремальное программирование» Кента Бэка – разработка через тестирование, «Паттерны проектирования» Эрика Гаммы и др. – усвоение идей о классах.
Ссылки включали: а) официальную документацию от Microsoft по языку макросов и библиотекам функций операционной системы; б) сторонние ресурсы: иконки для кастомизации ленты, сопоставление типов данных между языком VBA и Windows API, строки подключения к СУБД.
Соглашения охватывали: а) наименования – переменных, констант, процедур, функций, классов, интерфейсов, форм, элементов управления; б) организацию кода – внутри и между модулями с выделением типовых – например, под юнит-тесты, для кнопок на ленте, с вызовами API Windows.
Ученики отмечали: а) одну задачу можно решить несколькими вариантами макросов или выбрать стандартную функциональность; б) момент, когда вырастает сложность материала, наступает незаметно; в) рефакторинг повышает читаемость, но замедляет разработку и исполнение.
Чтобы освоить инструментальный навык, изученное должно оказываться «на кончиках пальцев». Простого перепечатывания вслед за преподавателем или по высланному файлу недостаточно. Желательно изучать справку и задаваться вопросами: почему сделали так и каковы альтернативы.
Опасение вызывали отсутствие развития языка с 2010 года и наличие новых технологий. Заверили: Microsoft не объявляла о планах прекратить поддержку, хотя Office Scripts существуют с 2020, а приход ИИ не избавил от необходимости разбираться, как работают сотни корпоративных макросов.
Составление курса полезно специалисту: в попытке предугадать реакцию аудитории знания растут вширь и вглубь. Анекдотичность ситуации «столько раз объяснял, что сам понял» уже не вызывает улыбки. Практика отрезвляет ледяным фактом: одно дело сказку слушать, другое – читать.