Основы использования VBA

Условные обозначения для синтаксиса программного кода:

  • | — вводится одно из нескольких возможных значений,
  • [ ] — необязательные параметры,
  • <информация, которая должна быть введена пользователем или программой>.

    Содержание

    Зачем это нужно? Возможные задачи
    Основные особенности
    Настройка параметров безопасности
    Запуск макросов
    Размещение макросов
    Создание кнопок на Ленте
    Запись макросов (макрорекордер)
    Использование Справки (Help)
    Редактор VBA (VBE)
    ПРОГРАММИРОВАНИЕ
    Работа с файлами
    Построение диалогов и экранных форм
    Диалоги
    InputBox
    InputBox в Excel VBA
    MsgBox
    Экранные формы (Forms)
    Особенности для PowerPoint (готовится)
    Особенности для Excel
    Объектные модели приложений MS Office
    Вопросы и задания
    Ссылки

    Зачем это нужно?

    VBA (Visual Basic for Applications) — язык программирования фирмы Microsoft, интегри­рованный в приложения MS Office: Word, Excel, Outlook, Access, PowerPoint, FrontPage, Visio, Project, а также в огромное число прикладных программ других производителей.

    Основное назначение языка — предоставить пользователям возможность создать надстройку над приложением, позволяющую эффективно решать собственные задачи. Они могут быть как простейшими, сиюминутными, так и представлять собой проекты колоссальной сложности. Согласно изначальной традиции, такие разработки называются макросами (macro) или макропрограммами.

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

    Однако литература имеется в изобилии только для двух программ: Access и Excel. Если для первой VBA — язык разработки приложений в среде СУБД, то во втором случае причина, скорее всего, лежит в финансовой обеспе­ченности задач разработки макросов.

    При этом наиболее востребованным инструментом для большинства пользователей остается Microsoft Word, о котором многие литературные источники по VBA лишь упоминают. В связи с этим, именно данная программа и будет обсуждаться в первую очередь (изначально — только она). См. также возможные задачи.

    Тут же позволю себе напомнить изначальное название языка, которое говорит само за себя: Word Basic.

    Основные особенности

    • Основное назначение VBA — предоставить пользователю возможность избавиться от выполнения рутинных, повторяющихся действий, описав их в виде программ.
    • Каждое приложение MS Office имеет свои особенности работы с информацией, свой набор объектов (объектную модель). Это определяет не только набор команд и функций, но и особенности выполнения некоторых из них в разных приложениях. Однако общий синтаксис и правила работы со свойствами объектов, названия функций и системных переменных остаются едиными, что намного облегчает освоение новых приложений.
    • При этом VBA является полноценным современным языком программирования, практически полностью идентичным Visual Basic. В нем отсутствуют лишь графические возможности для рисования.
    • Значительно упрощены правила работы с переменными. Пользователь может не заботиться о присвоении типов, хотя при этом замедляется работа, занимается больше памяти и могут остаться невыявленными некоторые ошибки. (Функция отключаема как системно, так и программно.)
    • Многие действия, задаваемые в программе пользователем, в принципе не могут быть выполнены через меню: явное расширение наших возможностей.

    Использование Справки (Help)

    Справка позволяет многократно упростить работу по редактированию и доработке макропрограмм. Наиболее эффективный способ её использования — установить курсор на слове в тексте программы и нажать горячую клавишу F1. К сожалению, качество подсказки и возможность поиска в ней за несколько последних версий MS Office существенно снизились.

    Для версии 2016/2019 при таком вызове происходит обращение на сайт Microsoft. Имеющиеся статьи содержат информацию, зачастую меньшую, чем было в локальной Справке. Перекрестные ссылки присутствуют через раз и ведут не туда, а ссылки «См. также» практически не реализованы.

    Настойчиво советую обращаться к исходному описанию на английском языке (переключатель в правом верхнем углу сайта). Это может снять множество вопросов неадекватного автоматизированного перевода.

    Запуск макросов

    Чтобы запустить макрос на исполнение, он должен быть создан и размещаться доступно, то есть в одном из открытых файлов.

    Если была задана кнопка или горячая клавиша, то запустить макрос можно с их помощью. Иначе — через диалог (Alt+F8).

    [Run Dialog]

    Он же может быть вызван через Ленту: вкладка Вид⇒Макросы⇒Макросы.

    Или через Ленту же: вкладка Разработчик⇒Код⇒Макросы, что намного удобнее.


    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


    Создание кнопок на Ленте

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


    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


    ....

    Размещение макросов

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


    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


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

    Шаблон должен сразу сохраняться как Шаблон с поддержкой макросов (*.docm или *.xlsm для Word и Excel, соответственно).

    В самом шаблоне макросы помещаются в модули. Во время записи таким модулем будет «New Macro». Но, по мере накопления, с ними становится неудобно работать из-за большого объема. Тогда пользователь может создать свои тематические модули и перенести туда подходящие по смыслу макросы. Например, для обработки таблиц, для устранения ошибок в тексте, учебные, библиотеки подпрограмм и т.д. При этом следует учитывать, что могут перестать работать некоторые абсолютные ссылки на них.

    Одним из последующих этапов развития может стать перевод отдельных макросов в скрытый (private) режим и их запуск из интегральных диалогов. Такой подход не только сократит список, но и позволит произвести систематизацию хранения. В моей практике можно привести примеры наборов для: обработки таблиц, литературных списков, спецсимволов, экспорт в HTML и т.д.

    Переименование созданного макроса осуществляется очень просто. Макрос всегда начинается одинаково:

    	Sub Macro_Name()
    

    Здесь «Macro_Name» — его имя, которое нужно изменить.

    Кстати, сохранение (Ctrl+S) в среде VBE приводит к сохранению шаблона с отредактированными макросами. При наличии привычки сохранятся, у вас минимизируется вероятность потери результата работы.

    Справедливости ради заметим здесь, что любой макрос всегда заканчивается одинаково:

    	End Sub
    

    Резюме. Макросы могут храниться (для Word):


    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


    Новогодний сюрприз 2021. В конце 2020 года было обнаружено, что интерфейс Яндекс-почты при сохранении *.docm-файла без предупреждения(!) переименовывает расширение в *.docx. Результатом становится файл, содержащий макросы, но Word их не будет подключать из-за отсутствия легитимного расширения. Текст документа открываться будет без помех. Для решения проблемы нужно изменить расширение, что разумнее сделать именно в процессе сохранения. Спасибо программистам за «заботу» (нет ребенка — нет проблемы).

    Встроенные команды

    В приведенном выше диалоге можно обнаружить элемент списка «Макросы из Команд Word». Суть заключается в изначальном создании программы: всё, что делается, является командой. Любая команда может быть описана на языке VBA и запущена из него, причем с рядом расширений, недоступных через пользовательский интерфейс. Отсюда вытекает неизбежный вывод: VBA может всё! Человек, умеющий использовать все команды, знает Word на 100%.

    Небольшое уточнение по именам команд.


    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


    ....Команд много, они повторяются и большинство работает только в VBA. Полного списка в Интернете нет. Страница создана, но на её обработку уйдет очень много времени.

    Вопросы и задания

    Большинство заданий дается и разбирается на занятиях. Приведенное здесь можно использовать для дополнительной тренировки.

    1. Записать макрос (построить алгоритм) ввода степени для переменной в математическом выражении.
    2. В Excel можно получить номер текущей (активной) колонки.
      Команда X = ActiveCell.Column присвоит числовой номер колонки переменной X.
      Для использования этого значения в указании диапазона, нужно перевести номер в символьное обозначение: для первой колонки — A, для второй — B, для 26-й — AA и т.д. вплоть до 256.
      Задание: написать программу, производящую такой перевод.
      Примечание. Лучше сделать функцию, принимающую числовой аргумент номера колонки.
    3. Анаграммы.
    4. См. также возможные задачи.

    Ссылки

    Учтите, что приводимые ссылки не решат всех ваших проблем. Но, может, вы поймете, что офисное программирование не только доступно каждому. Это — серьезный бизнес, где никто не горит желанием поделиться своими знаниями и навыками. Вы же можете на занятиях освоить достаточно многое, чтобы дальше не зависеть ни от кого и развиваться в пределах личных потребностей.

    1. Microsoft Office и VBA - Форум программистов.
    2. VBA и программирование в MS Office для пользователей (электронная книга для Office 2003). Альтернативный способ :).
    3. Начало работы с VBA в Office (от Microsoft).
    4. Справочник по VBA для Word (от Microsoft).
    5. Фризен И.Г. Программирование на VBA в Word (глава из книги).
    6. Word VBA Tutorial (English).
    7. Академия Microsoft: VBA в MS Office 2007. Лекция 12: Практические примеры программирования для MS Word.

  • Copyright © 1993–2023 Мацкявичюс Д.А. Все права защищены.
    Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.