1

Тема: VBA: автоматическая запись макросов — лучший способ изучения VBA

Как быстро найти способ реализации каких-либо действий в VBA без утомительного перелопачивания справки и книг? Например, нам необходимо выяснить, как программно изменить ориентацию страницы Excel на альбомную. Одним из способов создания кода модуля VBA является запись последовательности действий с помощью специальной функции записи макросов. Запишем макрос, изменяющий ориентацию страницы Excel на альбомную, и изучим автоматически сгенерированный код.
1. Запустите Excel и активизируйте любой рабочий лист.
2. Выполните команду меню "Сервис" - "Макрос" - "Начать запись...". В появившемся окне "Запись макроса" нажмите ОК, чтобы принять параметры по умолчанию. При этом Excel вставит новый модуль в VBA-проект и с этого момента начнёт преобразовывать ваши действия в код VBA (в строке состояния будет отображено слово "Запись", а на экране появится небольшая панель инструментов "Остановить запись").
3. Выполните команду меню "Файл" - "Параметры страницы...". На вкладке "Страница" открывшегося окна "Параметры страницы" выберите переключатель "альбомная" и нажмите ОК.
4. Остановите запись, нажав на кнопке "Остановить запись" одноимённой панели инструментов или выполнив команду меню "Сервис" - "Макрос" - "Остановить запись".
5. Запустите VBE, выполнив команду меню "Сервис" - "Макрос" - "Редактор Visual Basic" или нажав Alt+F11. Откройте окно Project Explorer, если оно закрыто (Ctrl+R) и в ветке "Modules" откройте "Module1" (если такой модуль уже был в проекте на момент начала записи макроса, вам потребуется "Module2" и т.д.). Вы увидите код, подобный следующему:

With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    ...
End With

Несмотря на то, что вы изменили только одну настройку в диалоговом окне "Параметры страницы", Excel сгенерировал код, задающий все параметры в этом диалоговом окне, поэтому не удивляйтесь количеству кода.
Строка, которая нас интересует, выглядит так:

.Orientation = xlLandscape

Отбросив "With", получим:

ActiveSheet.PageSetup.Orientation = xlLandscape

Это и есть то, что мы искали. Теперь мы знаем, как программно изменить ориентацию страницы Excel на альбомную.
Запись макросов во многих (но не во всех) случаях является лучшим способом изучить VBA. Даже несмотря на то, что в результате вы можете получить не совсем то, что ожидалось , автоматически сгенерированный код укажет правильное направление. Однако, не стоит забывать следующее:
1. Автоматически сгенерированный код может страдать отсутствием универсальности (например, он может быть связан с выделенными в данный момент элементами на листе и т.п.). В вышеприведённом примере, кстати, используется не произвольный, а активный в данный момент лист.
2. Таким способом удастся записать далеко не любые процедуры.
3. Автоматически сгенерированный код может изобиловать лишними деталями и быть неоптимальным с точки зрения производительности.
Примечание: если вы проводите подобные исследования, чтобы обратиться к Excel "извне" (с помощью OLE, к примеру), вам может потребоваться узнать значения встроенных констант Excel, которые в вашей среде программирования не объявлены. Например, чтобы узнать значение константы xlLandscape в вышеприведённом примере, вместо поиска по справке достаточно установить курсор на имени константы и нажать Ctrl+I.

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