Макрос в табличном процессоре это

Обновлено: 04.07.2024

Макрос (от англ. macros, мн.ч. от macro) — программный объект, при обработке «развёртывающийся» в последовательность действий и (или) команд.

ВложениеРазмер
lektsiya_5.1_programmirovanie_makrosov_dlya_elektronnoy_tablitsy.doc 50.5 КБ
lektsiya_5.2_programmirovanie_makrosov_dlya_elektronnoy_tablitsy._prodolzhenie.doc 74 КБ
prakticheskaya_rabota_5.1_avtomatizatsiya_raboty_v_openoffice_calc.doc 155 КБ
prakticheskaya_rabota_5.2_avtomatizatsiya_raboty_v_openoffice_calc.prodolzhenie.doc 233.5 КБ

Предварительный просмотр:

Программирование макросов для электронной таблицы

Макрос (от англ. macros , мн.ч. от macro ) — программный объект, при обработке «развёртывающийся» в последовательность действий и (или) команд.

Примеры объявлений переменных

Объявляет переменную "a" как строку.

DIM a As String

Объявляет переменную "a" как строку.

DIM a$, b As Integer

Объявляет одну переменную как строку, другую — как целое число.

DIM c As Boolean

Объявляет "c" как логическую переменную, которая может иметь значение либо TRUE, либо FALSE.

  • числовые переменные могут содержать числовые значения. Некоторые переменные служат для хранения больших или малых чисел, остальные используются для чисел с плавающей точкой или дробей;
  • строковые переменные содержат строки символов;
  • логические переменные содержат одно из значений: TRUE или FALSE;
  • объектные переменные могут содержать объекты различных типов, например таблицы и документы внутри документа.

Массивы необходимо объявлять с помощью инструкции Dim . Для определения диапазона индексов массива используется несколько способов (см. таблицу 5.2).

21 элемент, пронумерованный от 0 до 20

30 элементов (матрица из 6 x 5 элементов)

DIM text$(5 to 25)

21 элемент, пронумерованный от 5 до 25

DIM text$(-15 to 5)

21 элемент (включая 0), пронумерованный от -15 до 5

Диапазон индексов может включать положительные и отрицательные числа.

Константы имеют фиксированное значение. Они определяются в программе только раз и не могут быть переопределены позднее.

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

Библиотека может включать до 16000 модулей.

Модули диалоговых окон

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

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

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

Инструкции If. Then можно вкладывать одну в другую.

Else и ElseIf — необязательные инструкции.

Инструкция Do. Loop [время выполнения]

Повторяет инструкции между инструкцией Do и Loop , пока условие равно True или пока условие не станет равно True .


Привет, Хабр! Недавно в нашем корпоративном блоге мы рассказали о выходе новой версии МойОфис 2021.02, в которой появились удобные инструменты для работы с формулами и математическими выражениями, а также со сводными таблицами.

Помимо этого, в состав релиза 2021.02 вошел программный отладчик макрокоманд. Он проверяет исполнение кода и помогает обнаружить ошибки синтаксиса. Сегодня мы продемонстрируем возможности работы с макросами в документах на примере текстового редактора «МойОфис Текст», а заодно коснемся темы создания надстроек, которые позволят расширить функциональные возможности редактора.

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

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

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

Надстройка — программный модуль, который подключается в редактор и может работать не только с данными внутри конкретного документа, но и с другими документами, а также выполнять иные действия, включая операции с файлами.

МойОфис выпускает несколько продуктов для работы с документами и коммуникациями, — как для коммерческих, так и для частных пользователей. И тем и другим доступны макрокоманды, с которыми можно работать прямо в документах. Напомним, что продукт «МойОфис Стандартный. Домашняя версия» доступен для некоммерческого использования, бесплатен и не содержит рекламы. Его можно скачать с нашего сайта, а также в магазинах приложений Windows Store и Mac App Store. А вот работать с надстройками смогут только коммерческие пользователи, которые приобрели «МойОфис Стандартный».

Для написания макросов и надстроек в МойОфис используется свободный скриптовый язык программирования Lua. Этот кросс-платформенный язык легок в освоении и обладает достаточно широкими возможностями. В настоящий момент в МойОфис реализована поддержка Lua версии 5.3.2.

Отметим, что во всемирно известном офисном ПО Microsoft Office для создания макрокоманд применяется другая технология — VBA (Visual Basic for Applications), специальная версия языка Visual Basic для автоматизации действий внутри документов прикладного ПО. Но мы, как производитель программных продуктов, в силу существующих лицензионных ограничений не можем использовать проприетарные технологии Microsoft. Если вы представляете организацию, которая находится в процессе миграции на российские решения, то тоже не сможете пользоваться таким инструментом.

Кроме того, конверторов из VBA в Lua не существует в принципе. Поэтому, если вам требуется работать с документами, которые содержат макросы и были ранее созданы в Microsoft Office, то вам придется переводить код макрокоманд на язык Lua. Мы понимаем, что это может быть проблемой для тех, кто переходит на отечественное ПО, и специально для наших покупателей предлагаем такие решения:

Центр компетенций «Хаб Знаний МойОфис» разработал методологию обучения основам Lua, которая позволяет быстро научиться созданию макросов в редакторах МойОфис. Первая публичная лекция по этой методологии состоится 14 октября 2021 года.

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

Для создания макросов на Lua вам точно понадобятся следующие материалы:

«Руководство программиста» — детальное описание методов и функций, которые реализованы в библиотеке MyOffice Document API и используются для работы с макросами и надстройками в редакторах.

Как писать макросы в МойОфис

Сейчас мы покажем, как происходит работа с макросами и надстройками. Для начала запускаем редактор макросов, который находится в меню «Инструменты» — «Редактирование макроса».


Далее создаём новый скрипт: нажимаем на «плюс», после чего появляется название нового скрипта и возможность ввода кода. Для удобства работы можно задать произвольное название.


Рассмотрим простой пример

Для начала сделаем скрипт, который будет выводить в документ текстовую строку с фразой «Привет, Мир!». Для этого нам потребуется совершить несколько базовых действий. Сначала с помощью метода Document:getRange предоставим доступ ко всему документу как области данных:

Далее нужно определить позицию: в какую часть документа мы будем вставлять текст. В нашем случае — это конец документа. Определим значение переменной pos, которая будет отражать позицию в документе, и сделаем это с помощью метода Range:getEnd. Учтите, что этот метод возвращает позицию в конце фрагмента текстового документа, не включая последний символ paragraph mark. Если требуется определить позицию в начале документа, то пользуйтесь методом Range:getBegin.

Теперь воспользуемся методом Position:insertText и вставим строку с нужным нам текстом в определенную выше позицию в документе.

Наш первый макрос будет выглядеть следующим образом:



Как с помощью макросов в МойОфис посчитать число символов в документе

Попробуем сделать пример посложнее. Представим типовую задачу — нужно посчитать количество символов и слов в документе. Оставим от предыдущего примера переменные range и pos, они нам еще пригодятся.

Теперь с помощью метода text = range:extractText() преобразуем тело документа в одну текстовую строку. При работе с этим методом находящиеся внутри области изображения, таблицы и прочие подобные элементы документа игнорируются.

Перейдем к подсчету символов. Сделать это очень просто — нам нужно лишь определить длину строки, и для этого можно было бы воспользоваться простой функцией len(). Однако, в случае с кириллическими символами в строке, Lua будет считать длину строки неправильно, т.к. на каждый такой символ будет приходиться два бита, а не один, как в случае с латиницей или цифрами. К счастью, в Lua 5.3 появилась поддержка кодировки UTF-8, которой мы и воспользуемся. Введем переменную Allsymbols, которую определим с помощью функции utf8.len():

Неотъемлемой частью любого документа являются символы конца абзаца. Их может быть произвольное количество, и для правильного подсчета числа символов их надо удалить из результата, который мы получили выше с помощью utf8.len(). Но сначала нужно посчитать, сколько символов конца абзаца попало в строку при выгрузке с помощью метода extractText(). Для этого нам понадобится несколько строк кода. В них мы сперва определим значение переменной newLine равным нулю, а затем, с помощью простого цикла подсчитаем в выгруженном объеме текста общее количество всех символов конца абзаца. Используем для этого стандартную функцию string.gmatch, в аргументах которой указываем где искать (text) и что искать ("\n").

Теперь осталось лишь вычесть из общего числа символов AllSymbols число символов конца абзаца newLine. Введем новую переменную Symb:

Перейдем к подсчёту слов. С этим дело обстоит несколько сложнее — для определения числа слов нам потребуется воспользоваться функцией gsub (глобальная замена) и регулярным выражением.

Механика подсчета следующая: с помощью функции gsub мы определяем в строке слова, которые разделены пробелами. В этом нам помогает регулярное выражение %S+, с помощью которого определяются все элементы строки, не являющиеся пробелами. Так мы получаем все элементы, которые в строке отделены пробелами. И от функции gsub нам нужен не результат преобразования строки, а лишь число найденных элементов. Для этого мы определяем переменную Word как второй результат функции gsub и указываем это с помощью символа подчеркивания.

Следующая часть кода — создание таблицы, куда поместим найденные значения.

Для этого построим такую конструкцию: простую таблицу из двух строк и двух колонок (определяется переменной t_id), которая будет сопровождаться заголовком «Выводы»:

Теперь осталось сформировать таблицу и вывести в нее результат.

Для этого определим переменную tbl, которая с помощью методов document:getBlocks() и getTable() формирует таблицу в документе с заданными в переменной t_id значениями: 2 строки, 2 столбца, название «Some Table».

Далее нам остается только заполнить таблицу.

Для этого используем метод getCell для получения доступа к конкретной ячейке таблицы. Саму ячейку выбираем с помощью функции DocumentAPI.CellPosition, в аргументах которой начиная с нуля указываем номер строки и столбца. Затем, с помощью метода setText присваиваем ячейке текстовое значение типа «Текстовый», и выводим в нее нужную нам фразу. В случае с результатом вычислений, нам потребуется еще и преобразовать число в текст с помощью функции tostring.

В итоге получаем такой код макроса:

Вставляем код в соответствующее поле. При этом части кода маркируются разными цветами для лучшей читаемости. Назовем наш макрос «Символы».


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


Если в коде есть какие-то проблемы (в нашем случае была осознанно удалена буква m в слове document на 13 строке), то при отладке, в левом нижнем поле красным будет обозначена ошибка, а строка с ней помечена зелёной стрелкой.


Если мы устраним проблему и вернем букву m в слово docuent, а затем нажмем кнопку "Выполнить", то отладчик сообщит об успешном выполнении кода макроса:


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


Как запускать макросы из боковой панели редакторов МойОфис

Ещё один способ запуска скрипта в документе — это открытие панели запуска макросов. В поле под строкой «Поиск» будут перечислены все макросы данного документа.

Если навести курсор на строчку с желаемым макросом, появляются две дополнительных кнопки-символа — запуск и редактирование кода. Также запускать макрос можно двойным щелчком по названию.


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

Как писать надстройки в МойОфис

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

Файл регистрации надстройки является тестовым документом и должен называться Package.lua. Внутри него содержатся ключи и их значения. Некоторые ключи являются обязательными, другие — нет. Подробный перечень ключей, их описания и другие полезные материалы для разработки собственных модулей вы можете найти в «Руководстве программиста» на сайте МойОфис.

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

Осталось только создать файл лицензии LICENSE и поместить его в папку META-INF.


Теперь упаковываем всё это в Zip-архив и меняем расширение на .mox. Всё готово! Можем устанавливать.

Установка и запуск надстроек МойОфис

Процесс установки прост и понятен. Выбираем в меню «Надстройки» — «Управление надстройками». В появившемся окне нажимаем на единственную кнопку «Установить» и указываем нужный файл расширения.



Читаем и принимаем лицензионное соглашение. В случае отказа установка будет прервана.


Готово! Надстройка установлена и появилась в списке.


Тут же можно посмотреть информацию о ней, отключить ее или полностью удалить из приложения.


Запускается надстройка и выбираются команды также через раздел «Надстройки». После установки в нём появится название надстройки и список команд в выпадающем меню.


Нажимаем на единственную команду и видим результат — вставленную строчку.


В статье мы показали разницу между макросами и надстройками и продемонстрировали на примерах лишь малую часть их возможностей. Вы легко можете разработать свою надстройку, скомпилировать внешние модули для использования в её составе и расширить функциональные возможности программ МойОфис под свои запросы.

Напомним, что на нашем сайте и в магазинах операционных систем можно бесплатно загрузить и опробовать редакторы МойОфис. Специально для наших пользователей мы также подготовили «Руководство программиста», которое содержит подробное описание функций, команд и прочую необходимую документацию для работы с макросами и надстройками.

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

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

Многие люди боятся использовать макросы в Excel, потому что считают их довольно сложными для понимания. Все потому, что они связаны с программированием. Но на практике все оказывается значительно проще, чем может показаться на первый взгляд. В программировании важно научиться строить алгоритмы. И если человек умеет кодить хотя бы на одном языке, ему значительно проще усвоить все остальные.

Мы приведем некоторые примеры макросов Excel, которые станут верными помощниками в выполнении наиболее частых задач.

Понятие макроса

Термин «Макрос» слышало множество людей. Нередко при запуске таблицы появляется предупреждение: “Этот документ использует макросы, способные навредить данному компьютеру, поэтому они отключены с целью защиты от вредоносных действий”.

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

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

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

Значительно проще объяснить, зачем нужны макросы, на реальном примере. Например, необходимо каждый день удалять из электронной таблицы несколько столбцов, а потом добавлять новые строки. Это невероятно утомительное занятие, отнимающее много времени. Если же воспользоваться макросами, есть реальная возможность значительно его сэкономить.

Макросы можно запускать по нажатию определенной комбинации клавиш. Например, если нажать Ctrl+J, можно запустить подпрограмму.

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

Если же нужно давать компьютеру сложные инструкции, можно воспользоваться редактором Visual Basic, примеры кода в котором мы и рассмотрим немного позже.

Когда какой тип записи макросов использовать?

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

Пример использования макросов №1

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

  1. Объявление переменных.
  2. Указание ссылок на ячейки Excel.
  3. Применение цикла типа For.
  4. Применение условного оператора.
  5. Отображение оповещения.

Sub Find_String(sFindText As String)

iRowNumber = 0

For i = 1 To 100

If Cells(i, 1).Value = sFindText Then

iRowNumber = i

If iRowNumber = 0 Then

Пример 2

Эта процедура перечисляет все значения числовой последовательности Фибоначчи, вплоть до 1000. В этом примере приводятся следующие возможности макросов Excel:

  1. Объявление переменных.
  2. Цикл Do While.
  3. Ссылки на ячейки текущего листа Excel.
  4. Условный оператор.

Sub Fibonacci()

iFib_Next = 0

Do While iFib_Next < 1000

If i = 1 Then

iStep = iFib

iFib = iFib_Next

Cells(i, 1).Value = iFib

iFib_Next = iFib + iStep

Пример 3

Следующий пример подпрограммы читает значения с ячейки в колонке A активного листа, пока не найдет пустую ячейку. Вся полученная информация сохраняется в массиве. Это простой пример макросов в электронных таблицах, который показывает:

  1. Как объявлять переменные.
  2. Работу динамического массива.
  3. Цикл Do Until.
  4. Ссылки на ячейки в текущем листе Excel.
  5. Встроенную функцию Ubound, которая предназначена для определения размера массива.

Sub GetCellValues()

ReDim dCellValues(1 To 10)

Do Until IsEmpty(Cells(iRow, 1))

If UBound(dCellValues) < iRow Then

ReDim Preserve dCellValues(1 To iRow + 9)

dCellValues(iRow) = Cells(iRow, 1).Value

iRow = iRow + 1

Пример 4

Следующая процедура «Sub» читает содержимое ячеек из колонки А другого листа, имеющего название «Sheet2» и с этими значениями осуществляет арифметические операции. Результат вычислений пишется в колонке А текущего листа.

Этот пример показывает:

  1. Как объявлять переменные.
  2. Объекты Excel.
  3. Цикл Do Until.
  4. Доступ к листам электронных таблиц и диапазонам ячеек с текущей книги.

Sub Transfer_ColA()

Dim i As Integer

Dim Col As Range

Dim dVal As Double

Do Until IsEmpty(Col.Cells(i))

Cells(i, 1) = dVal

Пример 5

Этот пример макроса приводит пример кода VBA, связанного с событием. Каждый раз, когда человек выделяет ячейку или диапазон значений, связанное с макросом событие активируется.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count = 1 And Target.Row = 1 And Target.Column = 2 Then

Пример 6

Следующая подпрограмма демонстрирует, как обрабатывать ошибки с помощью операторов OnError и Resume. Также в этом коде описывается, как открывать и читать данные с файла.

Sub Set_Values(Val1 As Double, Val2 As Double)

Dim DataWorkbook As Workbook

On Error GoTo ErrorHandling

DataWorkbook.Close

ErrorHandling:

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

Рекомендации по использованию макросов

Есть несколько рекомендаций, позволяющих значительно увеличить эффективность использования макросов в электронных таблицах:

  1. Перед тем, как записывать макрос с помощью рекордера, следует заранее продумать все свои действия, поскольку автоматизироваться будут все действия (в том числе, и ошибочные).
  2. Не стоит торопиться, поскольку паузы при записи макросов не учитываются. Вполне можно начать продумывать по ходу какие-то действия. А все записанные операции будут обработаны в один момент.
  3. Обязательно необходимо научиться использовать режим отладки макроса. Если возникают какие-то ошибки, он поможет обнаружить, в чем причина неполадки. На первых порах без ошибок не обойтись, потому что в реальной программе будет все не так идеально, как может показаться на первый взгляд.
  4. Перед использованием макросов, сделанных другими людьми, нужно настроить антивирусную программу на их обнаружение. Как правило, эта опция установлена по умолчанию.
  5. Если загружаются документы из сомнительных источников, следует выбрать опцию «Отключить макросы» при их открытии. И не рекомендуется менять настройки, которые выставлены по умолчанию в настройках безопасности Excel.

Выводы

Таким образом, макросы – это эффективный инструмент автоматизации рабочих процессов в Excel. Он позволяет автоматизировать даже самые сложные последовательности действий. Если необходимо сделать простую программку, то достаточно воспользоваться встроенной функцией для записи макросов. Для более сложных необходимо освоить язык VBA, который является простым для изучения и очень гибким.

Если используются сторонние макросы, обязательно нужно побеспокоиться о безопасности их использования.

Всем нам приходится - кому реже, кому чаще - повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую "рутинную составляющую" - одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.

Макрос - это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.

Способ 1. Создание макросов в редакторе Visual Basic

Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно - редактор программ на VBA, встроенный в Microsoft Excel.

macro1.jpg

  • В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис - Макрос - Редактор Visual Basic(Toos - Macro - Visual Basic Editor).
  • В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer) . Выбираем Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer) . Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic(Visual Basic Editor)

    :

К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:

macro2.jpg

Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:

    Обычные модули - используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert - Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:

macro3.jpg

macro4.jpg

macro5.jpg

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

macro6.jpg

Давайте разберем приведенный выше в качестве примера макрос Zamena:

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

Способ 2. Запись макросов макрорекордером

Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается.
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.

Чтобы включить запись необходимо:

  • в Excel 2003 и старше - выбрать в меню Сервис - Макрос - Начать запись(Tools - Macro - Record New Macro)
  • в Excel 2007 и новее - нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)

Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:

macro7.jpg

  • Имя макроса - подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
  • Сочетание клавиш - будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис - Макрос - Макросы - Выполнить(Tools - Macro - Macros - Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
  • Сохранить в. - здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
    • Эта книга - макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
    • Новая книга - макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
    • Личная книга макросов - это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.

    После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording) .

    Запуск и редактирование макросов

    Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или - в старых версиях Excel - через меню Сервис - Макрос - Макросы (Tools - Macro - Macros) :

    macro8.jpg

    • Любой выделенный в списке макрос можно запустить кнопкой Выполнить(Run) .
    • Кнопка Параметры(Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
    • Кнопка Изменить(Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

    Создание кнопки для запуска макросов

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

    Кнопка на панели инструментов в Excel 2003 и старше

    Откройте меню Сервис - Настройка (Tools - Customize) и перейдите на вкладку Команды (Commands) . В категории Макросы легко найти веселый желтый "колобок" - Настраиваемую кнопку (Custom button) :

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

    Кнопка на панели быстрого доступа в Excel 2007 и новее

    Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar) :

    macro11.jpg

    Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:

    macro12.jpg

    Кнопка на листе

    Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:

    • В Excel 2003 и старше - откройте панель инструментов Формы через меню Вид - Панели инструментов - Формы (View - Toolbars - Forms)
    • В Excel 2007 и новее - откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)

    Выберите объект Кнопка (Button) :

    macro13.jpg

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

    Создание пользовательских функций на VBA

    Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция - только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).

    Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert - Module и введем туда текст нашей функции:

    macro14.jpg

    Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка - Функция) в категории Определенные пользователем (User Defined) :

    macro15.jpg

    После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:

    Читайте также: