Макросы в excel как продолжить

{quote}{login=}{date=01.09.2008 02:03}{thema=Re: }{post}Есть ли в EXCELе возможность выбрать макрос и нажать продолжить запись, сделать нужные действия и сохранить его.{/post}{/quote}  

  Инструкция:  
Записали макрос, например:  
Sub Макрос1()  
‘примечания  
   Range(«D3»).Select  
End Sub  

  Снова включаем макрорекордер, потом Макросы… -> Макрос1 -> Изменить, видим:  
Sub Макрос1()  
‘примечания  
   Range(«D3»).Select  
End Sub  
Sub Макрос3()  
‘примечания  
   Application.Goto Reference:=»Макрос1″  
End Sub  

  Стираем строки:  
End Sub  
Sub Макрос3()  
‘примечания  
   Application.Goto Reference:=»Макрос1″  

  Остались строчки, что были в начале, но курсор записи макроса сместился в него. Жмём Alt+q и продолжаем запись.

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

Вкладка «Разработчик»

Запись макроса осуществляется встроенным рекордером, кнопка запуска которого находится на вкладке «Разработчик» главного меню программы Excel. По умолчанию эта вкладка не отображается. Добавить вкладку на панель можно следующим образом:

Excel 2010-2016

Переходим по пути: Файл — Параметры — Настроить ленту. В разделе «Настроить ленту» справа в списке «Основные вкладки» устанавливаем флажок «Разработчик» и нажимаем кнопку «OK».

Excel 2007

Переходим по пути: значок «Microsoft Office» — Параметры Excel — категория «Основные», в категории «Основные» устанавливаем флажок «Показывать вкладку «Разработчик» на ленте» и нажимаем кнопку «OK».

Excel 2000-2003

Здесь ничего отображать не надо: кнопки по работе с макросами и редактором VBA находятся в главном меню на вкладке «Сервис» — «Макрос».

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

Запись макроса

Excel 2007-2016

На ленте во вкладке «Разработчик» нажмите кнопку «Запись макроса».

Excel 2000-2003

Пройдите по пунктам меню «Сервис» — «Макрос» — «Начать запись».

Откроется окно:

Окно «Запись макроса» в Excel

Окно «Запись макроса»

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

Сочетание клавиш: добавьте букву, если хотите запускать макрос сочетанием клавиш Ctrl+«буква». В какой раскладке вы впишите букву (например, «й» или «q»), в той и будет запускаться макрос. Если буква будет вписана в верхнем регистре («Й» или «Q»), используйте для запускa макроса сочетание клавиш Ctrl+Shift+«буква».

Сохранить в: выберите книгу, в которой должен быть сохранен макрос:

  • «Эта книга» — макрос будет записан в книге, из которой рекордер был запущен (нажата кнопка «Запись макроса»).
  • «Новая книга» — откроется новая книга и макрос будет записан в ней.
  • «Личная книга макросов» — макрос запишется в Личную книгу макросов и будет доступен из всех открытых книг Excel.

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

Заполнив окно, нажимаем кнопку «OK», кнопка «Запись макроса» меняет свое название на «Остановить запись», и можно приступать, собственно, к записи макроса. Выполните на рабочем листе операции, последовательность которых вы хотите автоматизировать и, после их завершения, нажмите кнопку «Остановить запись». Макрос будет записан и появится в списке макросов.

Список макросов

Окно со списком макросов открывается во всех версиях Excel нажатием кнопки «Макросы». Выглядит оно следующим образом:

Список макросов во всех открытых книгах Excel

Список макросов во всех открытых книгах

  • Выполнить — выделенный макрос будет запущен на выполнение.
  • Войти — переход к коду макроса, запущенному и поставленному на паузу, как при обнаружении ошибки в коде.
  • Изменить — переход к коду макроса для редактирования.
  • Создать — кнопка станет активной при записи имени нового макроса в поле «Имя макроса».
  • Удалить — удаление выделенного макроса.
  • Параметры… — редактирование сочетания клавиш для запуска макроса и его описания.
  • Находится в: — здесь можно выбрать все открытые книги или одну из них.
  • Описание — текст, добавленный в одноименное поле при создании макроса или редактировании его параметров.

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

Запустить записанный макрос можно следующими способами:

  • Сочетанием клавиш, указанным в параметрах макроса.
  • Кнопкой «Выполнить» из окна списка макросов.
  • Кнопкой «Run Sub» или клавишей «F5» из редактора VBA.
  • Кнопкой, добавленной на лист Excel из раздела «Элементы управления формы» и которой назначен запускаемый макрос.

Кроме этого макрос можно назначить изображению, добавить кнопку запуска на панель быстрого доступа и в меню (на ленту).

Пример записи простого макроса

Выполните следующие действия:

Excel 2007-2016

  1. Откройте книгу Excel или создайте новую и сохраните ее как книгу с поддержкой макросов (.xlsm).
  2. На вкладке «Разработчик» нажмите кнопку «Запись макроса».
  3. В окне «Запись макроса» нажмите кнопку «OK», оставив параметры по умолчанию.
  4. Перейдите на вкладку «Главная» и выберите любой цвет заливки ячеек.
  5. Нажмите кнопку «Остановить запись».

Excel 2000-2003

  1. Откройте книгу Excel или создайте новую и сохраните ее с расширением по умолчанию (.xls).
  2. Включите запись макроса, пройдя по пунктам меню «Сервис» — «Макрос» — «Начать запись».
  3. В окне «Запись макроса» нажмите кнопку «OK», оставив параметры по умолчанию.
  4. На панели инструментов выберите любой цвет заливки ячеек.
  5. Нажмите кнопку «Остановить запись».

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

Откройте список макросов, выберите записанный макрос и нажмите кнопку «Изменить». Вы увидите код вашего макроса:

Sub Макрос1()

‘ Макрос1 Макрос

    With Selection.Interior

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

        .Color = 5296274

        .TintAndShade = 0

        .PatternTintAndShade = 0

    End With

End Sub

Число (5296274) в вашем примере будет другим, в зависимости от выбранного цвета заливки.

Выберите на активном листе любую ячейку или диапазон, вернитесь в редактор VBA и нажмите клавишу «F5» (курсор должен находиться в любом месте внутри кода запускаемого макроса). На активном листе выделенный диапазон окрасится в выбранный при записи макроса цвет.

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

Sub Макрос2()

  Selection.Interior.Color = 5296274

End Sub

Скопируйте этот код и вставьте его внизу, под вашим макросом, в редакторе VBA (числовое значение цвета можете изменить на свое или оставить, как в примере). Проверьте его работоспособность, выбрав незакрашенные ячейки и запустив макрос клавишей «F5», не забыв о том, что курсор должен находиться внутри этого макроса.

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

Назначение макроса кнопке

Теперь давайте назначим записанный макрос (любой из двух) кнопке, добавленной на лист Excel из раздела «Элементы управления формы»:

Excel 2007-2016

  1. На вкладке «Разработчик» нажмите кнопку «Вставить» и в разделе «Элементы управления формы» кликните по изображению кнопки.
  2. Переведите курсор на табличную область листа, курсор примет вид крестика, и кликните левой кнопкой мыши.
  3. В открывшемся окне «Назначить макрос объекту» выберите один из новых макросов и нажмите кнопку «OK». Если нажать кнопку «Отмена», новая кнопка будет создана без назначенного макроса. Его можно будет назначить позднее, кликнув по ней правой кнопкой мыши и выбрав в контекстном меню «Назначить макрос…»

Excel 2000-2003

  1. Отобразите панель инструментов «Формы», пройдя по пунктам меню «Вид» — «Панели инструментов» — «Формы».
  2. Кликните по Кнопке на панели инструментов «Формы», затем переведите курсор на табличную часть рабочего листа, нажмите левую кнопку мыши и, не отпуская ее, нарисуйте прямоугольник (контур кнопки) нужного размера, затем отпустите кнопку мыши.
  3. В открывшемся окне «Назначить макрос объекту» выберите один из новых макросов и нажмите кнопку «OK». Если нажать кнопку «Отмена», новая кнопка будет создана без назначенного макроса. Его можно будет назначить позднее, кликнув по ней правой кнопкой мыши и выбрав в контекстном меню «Назначить макрос…»

Кнопка создана. Выберите ячейку или диапазон и нажмите созданную кнопку. Цвет фона изменится.

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

Сокращенный вариант кода по очистке фона будет выглядеть так:

Sub Макрос3()

  Selection.Interior.Pattern = xlNone

End Sub

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

Остановка макроса (процедуры)

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

  1. Если панель инструментов редактора VBA доступна, нажмите кнопку Break или Reset.
  2. Если редактор VBA не доступен, нажмите сочетание клавиш Ctrl+Break.
  3. Если сочетание клавиш Ctrl+Break не срабатывает, закройте программу Excel через Диспетчер задач.
  4. Если Диспетчер задач долго не открывается, остается только выключение компьютера большой кнопкой или кнопкой «Перезагрузка».

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2016

Здравствуйте! нужна ваша помощь. У меня есть макрос. он иногда выдаёт ошибку на любом участке. и происходит это не из за ошибки кода,а из за переполнения оперативной памяти или если 2-3 копии excel работают, с таким же макросом, то тоже может быть сбой и выскакивает то окно где написано END и DEBUG.
Мне нужно , что бы макрос в случае вот таких вот ситуаций продолжал работать методом повторного выполнения операции над которой и случилась ошибка(чтобы заново её выполнил). Я немного поискал в интернете и выяснил, что за это отвечает оператор Resume 0. Есть оператор Resume Next, который игнорирует ошибку и макрос продолжает работать со следующей операции. Но мне это не подойдёт. мне нужно именно, чтобы макрос заново с операции на которой случилась ошибка продолжил работать(т.е. выполнил её снова)
Только вот куда этот Resume 0 вставлять? Хотелось бы чтобы поставить этот Resume 0 в начале всего кода макроса, и не париться. Но как это сделать?

макрос у меня очень простой. сохранение листа в файл:
Sub Сохранение()
Application.ScreenUpdating = False
Dim Fname As String
Sheets(Array(«2»)).Copy
With ActiveWorkbook
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
Application.DisplayAlerts = False
.SaveAs Filename:=ThisWorkbook.Path & «» & «1.xls», FileFormat:=56
Application.ScreenUpdating = True
‘Application.DisplayAlerts = True
End With
ActiveWorkbook.Close
End Sub

На чтение 17 мин. Просмотров 6.2k.

Итог: Изучите 18 советов для экономии времени при написании макросов VBA для Excel или других приложений Office.

Уровень мастерства: Средний

18 VBA Macro Shortcuts to Automate Excel in 2018

Содержание

  1. 18 Советов для макросов VBA
  2. Скачать PDF
  3. Содержание
  4. Скачать PDF
  5. Какой ваш любимый совет для VBA?

18 Советов для макросов VBA

В начале прошлого года я написал популярный пост о 17 советах для Excel на 2017 год. Я решил продолжить традицию в этом году и написать пост о советах, которые сэкономят ваше время при написании макросов VBA.

Здесь часть из моих любимых советов, а также некоторые любимые из блога на YouTube и моего курса VBA Pro.

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

Скачать PDF

Вы можете скачать печатную версию статьи в формате PDF.

Содержание

  1. Alt + F11, чтобы открыть редактор VB
  2. Храните свои макросы в личной книге макросов
  3. Ctrl + Пробел для автозаполнения
  4. Intellisense для листов
  5. Использовать комментарии либерально
  6. F8, чтобы пройти через каждую строку кода
  7. Назначить макросы фигурам
  8. Автоматизируйте повторяющиеся задачи с помощью
    цикла For Next
  9. Используйте Option Explicit
  10. Таблицы Excel (ListObjects)
  11. Получить код с помощью Macro Recorder
  12. Непосредственное окно
  13. Назначить сочетание клавиш для макроса
  14. Убедитесь, что выбран диапазон
  15. Ctrl + Y, чтобы удалить строку кода
  16. Ctrl + I для быстрой информации
  17. Ctrl + J Открывает раскрывающийся список
    Intellisense
  18. Функции рабочего листа

# 1 — Alt + F11, чтобы открыть редактор VB

VB Editor — это приложение, которое мы используем для
написания макросов и создания пользовательских форм. Его можно открыть, нажав
кнопку Visual Basic на вкладке «Разработчик» в Excel.

Developer Tab in Excel 2016 with Visual Basic Button to Open VB Editor

Сочетание клавиш для открытия редактора VB в любой версии
Excel для Windows — Alt + F11.

Open the VB Editor with Alt+F11

Версия для Mac — Opt + F11 или Fn + Opt + F11.

Если вы не видите вкладку «Разработчик» на ленте, щелкните
изображение, чтобы узнать, как его включить:

18 трюков для Excel VBA 2018 год

Клавиши Fn (функция) на ноутбуках

Если вы используете клавиатуру ноутбука, вам нужно нажать и удерживать клавишу Fn, прежде чем нажимать F11. Функциональные клавиши на ноутбуках, как правило, являются многофункциональными клавишами и требуют нажатия клавиши Fn для активации функциональных клавиш (F1 – F12).

Некоторые ноутбуки имеют функцию Fn Lock, которая делает
функциональные клавиши первичными, что означает, что вам не придется нажимать
клавишу Fn при нажатии F1-F12.

Ознакомьтесь с моей статьей «Лучшие сочетания клавиш для Excel», чтобы узнать больше.

# 2 — Храните свои макросы в личной книге макросов

Personal Macro Workbook (PMW) — это отличное место для
хранения часто используемых вами макросов. Эта книга открывается в фоновом
режиме каждый раз, когда мы открываем Excel, что делает наши макросы легко
доступными.

Excel Personal Macro Workbook Tool belt or Purse Quote

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

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

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

18 трюков для Excel VBA 2018 год

# 3 — Ctrl + Пробел для автозаполнения

Это одно из часто используемых мною сочетаний клавиш в VBA. Когда мы набираем код, Ctrl + Space открывает раскрывающееся меню Intellisense, которое содержит список подходящих объектов, свойств, методов, констант и переменных.

Ctrl+Space to Auto Complete Words with Intellisense in VBA

Чтобы
использовать сочетание клавиш Ctrl + Space в VB Editor:

  1. Начните вводить строку кода, подобную
    ActiveCell.
  2. После ввода первых нескольких букв нажмите Ctrl
    + Пробел
  3. Вы увидите список всех слов VBA, которые
    начинаются с Act.
  4. Нажмите стрелки вверх / вниз, чтобы выбрать
    слово
  5. Затем нажмите Tab или Enter, чтобы завершить
    слово.

У этого трюка есть два основных преимущества:

  1. Это экономит время, так как не нужно набирать длинные слова и имена переменных.
  2. Это предотвращает опечатки, потому что VBA завершает слова для вас.

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

# 4 — Intellisense для листов

Обычно мы также видим раскрывающееся меню Intellisense после ввода точки (.) В редакторе VB.

VBA Intellisense Drop Down List Properties and Methods of an Object

Однако это работает не всегда. Одним из распространенных случаев является свойство Worksheets.

Если мы введем Worksheets («Лист1»). Мы НЕ видим меню Intellisense. Вы можете расстроиться и подумать, что Intellisense не работает.

VBA Intellisense Drop Down Menu Missing for Worksheets Property

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

Есть два способа обойти это и увидеть Intellisense для
рабочих листов:

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

Intellisense for Sheet CodeName

2. Сначала установите для рабочей таблицы переменную объекта Worksheets. Затем, когда мы введем имя переменной, за которым следует точка (ws.), Появится меню Intellisense.

Сначала установите для рабочей таблицы переменную объекта Worksheets. Затем, когда мы введем имя переменной, за которым следует точка (ws.), Появится меню Intellisense.

Use Variable to View Intellisense for Worksheet Object

# 5 — Используйте комментарии чаще

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

Чтобы создать комментарий в VBA, вы вводите апостроф в
начале строки. Как только вы переместите текстовый курсор за линию, текст
станет зеленым.

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

VBA Comments Start with Apostrophe Make Code Easier to Read

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

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

Если вы собираетесь поделиться своим проектом VBA или в
конечном итоге передать его кому-то другому для технического обслуживания,
тогда им будет намного легче выучить ваш код, если вы добавите много
комментариев. Я называю это «вежливым планированием вашего наследия». 🙂

№ 6 — F8, чтобы пройти через каждую строку кода

Сочетание клавиш для перехода по каждой строке кода — F8. Эквивалентом Mac для Step Into/Through является Cmd + Shift + I.

Это позволяет нам тестировать и отлаживать каждую строку
кода в наших макросах. Мы также можем открыть Excel рядом с редактором VB (или
на отдельном мониторе), чтобы увидеть действия, выполняемые в Excel при
выполнении каждой строки.

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

Step Through VBA Code with the F8 Key

Чтобы использовать ярлык Step Into/Through:

  1. Нажмите внутри макроса, который вы хотите
    запустить. Вы можете нажать на любую строку кода. Макрос всегда будет
    начинаться сверху.
  2. Нажмите F8.
  3. Имя макроса будет выделено желтым цветом.
  4. Нажмите F8 еще раз, чтобы запустить эту строку и
    выделить следующую строку.
  5. Продолжайте нажимать F8, чтобы запустить каждую
    строку.

Важно отметить, что выделенная желтым строка еще не была выполнена. Она будет запущен, когда вы снова нажмете F8.

# 7 — Фигуры, запускающие макросы

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

Create Custom Macro Buttons with Shapes

Чтобы назначить макрос формой:

  1. Вставьте фигуру на лист и отформатируйте ее по
    своему вкусу. Обычно это будет прямоугольная или круглая форма, содержащая
    текст.
  2. Щелкните правой кнопкой мыши форму и выберите
    «Назначить макрос …».
  3. Выберите макрос из списка и нажмите ОК. Макрос
    обычно будет тем, который хранится в той же книге, что и фигура.
  4. Нажмите на форму, выбрав ячейку на листе.
  5. При наведении курсора курсор изменится на указатель
    руки. Нажатие на форму запустит макрос.

Я рекомендую, чтобы окно «Да / Нет» появилось до того, как макрос действительно запустится. Это предотвращает любые случайные нажатия кнопок. Посмотрите мое видео о добавлении окна сообщения Да / Нет в ваши макросы. Это часть моей серии видеороликов о Персональной рабочей тетради.

# 8 — Автоматизируйте повторяющиеся задачи с помощью цикла For Next

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

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

How a For Next Loop Works in VBA

Существует несколько различных типов циклов, но цикл For Next Loop является наиболее распространенным. Ознакомьтесь с моей углубленной статьей «For Next Loop» в VBA для более подробной информации об этой обязательной технике кодирования.

# 9 — Используйте Option Explicit

Это еще одна спорная тема, но я требую (вежливо прошу), чтобы все участники моего курса VBA Pro использовали Option Explicit.

Итак, что это и почему?

Опция Explicit требует от нас объявить все переменные. Когда
мы видим строки кода с инструкциями Dim в верхней части макроса, это объявляет
переменную.

Option Explicit to Requires Variables Declaration and Prevent Typos

Мы в основном говорим VBA создать переменную в памяти для
последующего использования во время выполнения кода. Затем мы можем установить
значения или ссылки на объекты для этих переменных в макросе под оператором
Dim.

Основное преимущество Option Explicit заключается в том, что
он предотвращает опечатки и экономит время. Редактор VB выдаст сообщение
«Ошибка компиляции: переменная не определена» при попытке запустить код, если
переменная в коде не объявлена. Также будет выделена переменная, чтобы вы могли
объявить ее или исправить опечатку.

Если у вас нет Option Explicit и неправильно написана
переменная, код все равно будет работать и может привести к ошибкам в
результатах. Если ваш макрос длинный, то может понадобиться много времени,
чтобы найти эти опечатки. Доверьтесь мне. Там было сделано это!

Опция Explicit предотвращает эти ошибки и помогает вам
оставаться в здравом уме. 🙂

Чтобы включить Option Explicit, просто введите слова Option
Explicit в верхней части модуля кода. Вы также можете сделать так, чтобы VB
Editor автоматически добавлял слова в новые модули кода, для этого перейдите в
Инструменты> Параметры> установите флажок «Требовать декларацию
переменной». Опция Explicit теперь будет отображаться в верхней части каждого
нового кода модуля, который вы создаете.

# 10 — Таблицы Excel (ListObjects)

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

Таблицы Excel также значительно упрощают написание кода VBA
для динамических диапазонов данных. Это список или набор данных, в котором
количество строк или столбцов постоянно меняется по мере получения новых /
обновленных данных.

Например, следующая строка кода ссылается на ячейки в
диапазоне A2: A15.

Range("A2:A10").Font.Bold = True

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

Однако, если мы храним данные в таблице Excel и ссылаемся на
столбец таблицы, нам не нужно об этом беспокоиться.

Excel Tables List Objects with VBA References

Следующая строка кода ссылается на тот же столбец.

Range("Table1[Date]").Font.Bold = True

Преимущество в том, что код будет автоматически включать
новые строки, добавленные в таблицу. Не требуется ручное обновление или
обслуживание кода.

Мы также можем ссылаться на таблицы Excel с помощью объекта,
свойств и методов ListObjects в VBA.

ActiveSheet.ListObjects("Table57").ListColumns("Date").DataBodyRange.Font.Bold = True

Определенно есть некоторые преимущества использования ListObjects, когда дело доходит до изменения структуры таблицы (добавление / удаление строк / столбцов) и свойств, а также циклического перемещения по таблице. Читайте статью моего хорошего друга Криса Ньюмана о ListObjects в VBA, в ней множество примеров.

# 11 — Получите код с помощью Macro Recorder

Macro Recorder — удивительная особенность Excel и VBA. Он
создает код VBA при выполнении действий в Excel.

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

Macro Recorder Creates VBA Code as you take Action in Excel

Это отличный инструмент для использования, когда мы начинаем
с макросов. И это также отличный инструмент для изучения и получения фрагментов
кода. Объектная модель Excel огромна, и для меня невозможно запомнить все
ссылки на свойства, методы и объекты. Таким образом, средство записи макросов —
отличный способ получить некоторый код для сводной таблицы, объекта списка,
среза, фигуры или любого другого объекта, с которым вы не знакомы.

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

# 12 — The Immediate Window

Immediate Window в редакторе VB позволяет нам запускать одну строку кода. Мы можем запустить действие (метод) над объектом или вернуть результат кода обратно в Immediate Window. Может быть, мы хотим определить, сколько рабочих листов в рабочей книге.

VBA Immediate Window Excel Worksheets Count

Введите ?Worksheets.Count и нажмите Enter. Результат будет отображен в строке ниже.

Immediate Window также является местом, в которое выводится метод Debug.Print.

Сочетание клавиш для открытия окна Immediate в редакторе VB
— Ctrl + G

За подробностями обращайтесь к моей статье о 5-ти вариантах использования Immediate Window в VBA.

# 13 — Назначьте сочетание клавиш для макроса

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

Assign a Keyboard Shortcut to a Macro

Чтобы назначить сочетание клавиш:

  1. Нажмите кнопку «Макросы» на вкладке
    «Разработчик» или «Просмотр» на ленте.
  2. Выберите файл, содержащий макрос, в
    раскрывающемся списке «Макросы в».
  3. Выберите макрос из списка.
  4. Нажмите кнопку «Опции…».
  5. Введите букву в поле «Сочетание клавиш»,
    которому вы хотите назначить макрос. Все ярлыки начнутся с Ctrl. Вы можете
    удерживать клавишу Shift при наборе буквы, чтобы создать комбинацию клавиш Ctrl
    + Shift. Обычно это рекомендуется, потому что большинство комбинаций клавиш
    Ctrl + уже имеют выделенные сочетания клавиш в Excel.
  6. Нажмите ОК и закройте окно макроса.
  7. Теперь вы можете нажать комбинацию клавиш для
    запуска назначенного макроса.

# 14 — Проверьте, выбран ли диапазон

Иногда вам нужно убедиться, что у пользователя выбран диапазон (ячейки) до запуска макроса. Если у них выбрана форма (диаграмма, срез и т.д.), это может привести к ошибкам в вашем коде.

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

Вот код, который проверит, выбран ли диапазон.

' Проверьте, что диапазон выбран
If TypeName(Selection) <> "Range" Then
  MsgBox "Please select a range first.", vbOKOnly, "Select Range"
  Exit Sub
End If

Функция TypeName возвращает тип данных или имя объекта для
данной переменной или объекта. В этом случае он оценивает Selection и
возвращает тип выбранного объекта. Если это не (<>) диапазон, тогда
оператор If верен.

Обычно вы хотите поместить это в начало макроса. Если диапазон НЕ выбран, появится окно сообщения (всплывающее), в котором пользователю будет предложено выбрать диапазон. Строка Exit Sub завершит макрос.

# 15 — Ctrl + Y, чтобы удалить строку кода

В редакторе VB Ctrl + Y удаляет строку кода, в которой
находится текстовый курсор.

No Direct Keyboard Shortcut in VB Editor for Redo - Ctrl+Y Deletes Line

Это создает большую путаницу, поскольку Ctrl + Y обычно
используется для команды «Повторить» практически во всех других приложениях,
включая Excel!

Если вы посмотрите на меню «Правка» в редакторе VB, то
увидите, что для «Вернуть» нет выделенного ярлыка. Мы можем использовать Alt,
E, R в качестве альтернативного ярлыка для Redo.

Это всего лишь одна из тех странных причуд VBA, которые
действительно приятно знать.

# 16 — Ctrl + i для быстрой информации

Это еще одна отличная комбинация клавиш, которую нужно
знать. Ctrl + i отображает всплывающую подсказку, которую вы видите при
написании или выполнении кода. Это позволяет вам видеть все параметры в
свойстве, методе или функции.

Quick Parameter Info - Ctrl+i VBA Shortcut

Чтобы использовать сочетание клавиш Ctrl + i:

  1. Поместите текстовый курсор в слово, для которого
    вы хотите отобразить всплывающую подсказку.
  2. Нажмите Ctrl + i.
  3. Появится всплывающая подсказка.
  4. Нажмите Escape, чтобы закрыть его или переместить
    курсор.

Если в строке выделена переменная, и вы хотите видеть
информацию о параметре вместо значения / типа данных переменной, нажмите Ctrl +
Shift + i, чтобы просмотреть информацию о параметре.

# 17 — Ctrl + J открывает раскрывающийся список IntelliSense

Сочетание клавиш Ctrl + J откроет раскрывающееся меню Intellisense, в котором отображается список объектов, свойств, методов, переменных и т.д.

Обычно я использую его, когда набираю частичную строку кода и заканчиваю ее точкой, например Range («A1»).

Ctrl+j to open Intellisense Drop Down Menu in VBA

Затем я хочу вернуться к этой строке и увидеть выпадающий
Intellisense. Нажатие Ctrl + J открывает меню. В противном случае вы должны
удалить период и ввести его снова.

Мы также можем использовать Ctrl + J, чтобы выбрать другую
переменную из списка. Если вы где-то использовали неправильное имя переменной
или вам нужно его изменить, нажмите Ctrl + J, чтобы увидеть список имен
переменных. Если вы добавите префикс к своим именам переменных (он же
венгерская нотация), то другие переменные должны быть довольно близки в этом
списке.

№ 18 — Функции листа

Знаете ли вы, что мы можем использовать функции рабочего листа в VBA? Это функции, которые мы используем в формуле в Excel, такие как: vlookup, match, countif, max, min и т.д.

Тип WorksheetFunction. в макросе, чтобы увидеть список всех
функций Excel, которые доступны в VBA.

WorkSheetFunction Property for Excel Functions in VBA

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

Всплывающая подсказка для функции показывает количество
аргументов, но НЕ показывает имена аргументов. Поэтому обычно нам нужно набрать
формулу в Excel, чтобы определить, что представляет собой каждый аргумент (если
вы не запомнили его).

WorkSheetFunction Property in VBA does not contain Excel argument names

Функция рабочего листа, которую я чаще всего использую в VBA — это Match. Мы можем использовать Match для поиска значения и возврата номера строки или столбца ячейки, содержащей соответствующее значение. Иногда это может быть проще, чем с помощью метода Range.Find. Ознакомьтесь с моей статьей и видео о том, как найти последнюю использованную ячейку на листе, чтобы узнать больше о методе Range.Find.

Скачать PDF

Вы можете скачать печатную версию статьи в формате PDF.

Какой ваш любимый совет для VBA?

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

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

Остановка выполнения Excel Macro при нажатии Esc не будет работать

Я запускаю excel 2007 на XP.

Есть ли способ остановить выполнение макроса во время его выполнения, кроме нажатия escape? Обычно, если я думаю, что я создал цикл infinate или иначе что-то испортил, я нажал кнопку escape, и он выдает ошибку, но макрос останавливается.

На этот раз (и я сделал это раньше, но не так плохо), я установил msgbox для быстрой отладки. Оказывается, он должен был зацикливаться около 6000 раз, что означает, что я должен был «ОК» 6000 ящиков сообщений, что заняло несколько минут. Я не сохранил перед запуском (еще одна ошибка), поэтому я не смог открыть диспетчер задач для выхода.

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

Используйте CRTL + BREAK , чтобы приостановить выполнение в любой точке. Вы будете переведены в режим разрыва и можете нажать F5 , чтобы продолжить выполнение, или F8 , чтобы выполнить пошаговый код в визуальном отладчике.

Конечно, это работает только при отсутствии открытого окна сообщения, поэтому, если ваш код VBA постоянно открывает окна сообщений, по какой-то причине будет немного сложно нажать клавиши в нужный момент.

Вы даже можете редактировать большую часть кода во время его работы.

Используйте Debug.Print для вывода сообщений в Immediate Window в редакторе VBA, что более удобно, чем MsgBox .

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

Вы можете использовать Debug.Assert для остановить выполнение условно.

CTRL + SCR LK (Scroll Lock) работал у меня.

Иногда правильный набор ключей ( Pause , Break или ScrLk) недоступен на клавиатуре (чаще всего это происходит с пользователями ноутбуков) и нажатие Esc 2, 3 или несколько раз не останавливается макрос тоже.

Я тоже застрял, и в итоге нашел решение в функции доступности Windows, после чего я попробовал все исследованные варианты, и 3 из них работали для меня в 3 разных сценариях.

Шаг # 01. Если ваша клавиатура не имеет определенного ключа, не волнуйтесь и откройте «OnScreen Keyboard» из Windows Utilities, нажав Win + U .

Шаг # 02. Теперь попробуйте любой из нижеперечисленных параметров, и они определенно будут работать в зависимости от вашей системной архитектуры, то есть версии ОС и Office

  • Ctrl + Pause
  • Ctrl + ScrLk
  • Esc + Esc (дважды нажмите последовательно)

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

Как остановить выполнение макроса в excel

Здравствуйте, i-s-v, Вы писали:

ISV>Как програмно завершить работу макроса? Макрос вызываеться при нажатии на настроенную кнопку. и должен останавливаться при закрытии формы. Какая процедура завершает работу макроса?
ISV>

Такой процедуры нет. Однако можно попытаться выкрутиться. Пример:
1. В VBA-проекте новой книги добавить стандартный модуль
2. В добавленный модуль вставить код:

3. Добавить в проект форму
4. Добавить обработчик события Terminate этой формы:

5. На какую-нибуть панель инструментов добавить 2 кнопки: на кнопку 1 назначить макрос testMacros, на кнопку 2 — testForm
6. Расположить окна MS Excel и проекта VBA так, чтобы они одновременно были видны целиком на экране. В окне VBA сделать видимым окно отладки (например, нажать Ctrl+G)
7. Нажать на кнопку 1 — в окно отлаки VBA начнут сыпаться значения системного времени
8. Нажать на кнопку 2 — на экране должна появиться форма, дерьмо в окно отладки продолжает сыпаться
9. Закрыть форму — поток дерьма иссякнет.

Суть:
1) при выполнении макроса надо вызывать DoEvents, давая таким образом возможность обрабатываться другим событиям, например, щелчкам мышью на кнопках панели инструментов.
2) в ходе выполнения макроса проверять значение глобальной переменной, разрешающей выполнение, если выполнение запрещено — выходить из цикла(процедуры) макроса
3) воздействовать на глобальную переменную из любой удобной точки — применимо к текущему примеру — при закрытии формы

Корявенько, но для некоторых случаев вполне работоспособно.

Остановка макроса из UserForm[vbModeless]

1. Как раз DoEvents ща смотрю, надежд пока мало (событие Click там не любят или спец. скрывают. )

2. Да, эта наша тяжелая артиллерия. :-).
иногда правда бывает, что через API получается даже изящнее, так что будем дерзать, если что найду, обязательно напишу, потому что вещь я думаю нужная всем кто пишет макросы для общего употребления. Да и просто приятно..

Прикольно. Спасибо за совет — DoEvents — заработал.

Я его понаставлял в разные куски макроса, как раз где у меня FormWait.Repaint обновляется (чтобы значение ProgressBar увеличить и текст того чем он щас занимается обновить).
А работает он следующим образом, когда нажимаешь на кнопку «Прервать», то событие до нее дойдет, как только в макросе повстречает DoEvents. (когда промежуток между соседними DoEvents большой, то получается так — на кнопку жмешь. ничего не происходит, кнопка не шевелится, потом через 5-10 сек раз и полезло то, что на кнопке висело..) Весело вообщем.

А для того, чтобы после нажатие кнопки «Прервать» выполнение макроса прекратить, я лучше ничего не нашел, как сделать это так:

Private Sub ButCancel_Click()
Dim Response
Response = MsgBox(«Вы точно хотите прервать работу макроса?», vbQuestion + vbOKOnly + vbOKCancel, «Внимание!»)
If Response = 1 Then
Unload FormWait
MyModule.blnBreak = True
Else
End If
End Sub

А в макросе, после каждого DoEvents сделать проверку, что-нибудт типа такого:
If blnBreak Then Exit Sub

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

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

Чтобы остановить — попробуй End

Просто я хотел свой код, относящийся к форме, максимально, как это сказать-то . инкапсулировать. Т.е. есть форма (один файл), включил ее в проект, перенес на другой комп, переслал другому человеку, и не надо потом долго объяснять за какие переменные там дергать, за чем следить, че проверять и вызывать.
А делать с этой формой особенного ничего и не надо, показал/скрыл ее, значения на ProgressBar обновил (ну и на подписях).
Для последнего я включил в модуль формы такую функцию:

Public Sub ShowFormWait(progValue As Double, textProc As String, TextFile As String)

Прерывание процедур и функций VBA

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

Оператор Exit

Для того, чтобы процедура или функция прекратила выполнение, используется одна из двух доступных форм VBA-оператора Exit, в зависимости от того, необходимо ли завершить функцию или процедуру:

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

Здесь содержится код проверки того, была ли выбрана пользователем в окне ввода кнопка «Отмена». Если это так — программа выдает сообщение о том, что не был введен возраст, и прекращает выполнение кода оператором Exit Sub.

Оператор Exit Sub приводит к тому, что VBA немедленно прекращает выполнение кода процедуры. После выполнения этого оператора VBA прекращает выполнение текущей процедуры и возвращается к выполнению той процедуры или функции, которая вызвала процедуру, содержащую оператор Exit Sub.

Оператор End

Для полного завершения выполнения программы используется ключевое слово End в отдельной строке:

При выполнении этого оператора VBA прекращает все выполнение операторов процедуры и функции. Любые имеющиеся переменные перестают существовать и их значения теряются.

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

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

В начало страницы

В начало страницы

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

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

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

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

В меню Вид последовательно выберите пункты Макросы и Записать макрос.

Введите имя макроса или примите имя по умолчанию, предлагаемое Word.

Чтобы использовать этот макрос во всех новых документах, убедитесь в том, что в списке Сохранить макрос в выбран пункт Все документы (Обычный).

Нажмите кнопку Клавиатура, чтобы назначить макросу сочетание клавиш.

В Word откроется диалоговое окно Настройка клавиатуры.

Введите сочетание клавиш в поле Нажмите новое сочетание клавиш.

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

Если выбранное сочетание клавиш уже назначено, удалите его в поле Нажмите новое сочетание клавиш и выберите другое сочетание.

Найдя свободное сочетание клавиш, переходите к следующему шагу.

Чтобы использовать это сочетание клавиш во всех новых документах, убедитесь в том, что в поле Сохранить изменения в выбран глобальный шаблон Normal.dotm.

Нажмите кнопку Назначить.

Когда вы будете готовы к записи макроса, нажмите кнопку ОК.

Последовательно выберите нужные команды или нажмите нужные клавиши.

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

Чтобы остановить запись, в меню Вид последовательно выберите пункты Макросы и Остановить запись.

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

В меню Вид последовательно выберите пункты Макросы и Просмотр макросов.

В списке Имя макроса выберите макрос, который хотите запустить.

Нажмите кнопку Запустить.

В меню Вид последовательно выберите пункты Макросы и Просмотр макросов.

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

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

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

Когда в Word появится подтверждение на удаление макроса, нажмите кнопку Да.

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

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

Примечание: Команды для записи, создания и удаления макросов, а также другие дополнительные функции также доступны на вкладке » разработчик » на ленте. Дополнительные сведения об использовании вкладки «Разработчик» можно найти в разделе Использование вкладки «Разработчик» для создания и удаления макроса в Excel 2016 для Mac.

Выберите Сервис _гт_ макрос _гт_ запись New.

В поле Имя макроса укажите имя макроса.

Чтобы создать сочетание клавиш для макроса, введите букву в поле Option + cmd .

Выберите расположение макроса в раскрывающемся списке.

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

Как записать самый простой макрос?

Для начала запишем самый легкий макрос — зададим в ячейке А1 формат вида 12 345:

  •  Открываем новую книгу, в ячейке А1 набираем шестизначное число 123456. Сейчас оно выдается без разделителей разрядов. Запишем макрос, который ставит эти разделители.
  •  Заходим на панели инструментов в закладку Вид*, находим кнопку Макросы, жмем Запись макроса. В появившемся окне задаем имя макроса и книгу, в которой хотим этот макрос сохранить.

Важно

Запустить макросы можно только из открытых книг, поэтому если вы планируете использовать записанные вами макросы довольно часто, стоит использовать специальную книгу макросов, которая автоматически открывается вместе с запуском сеанса Excel.

Если вы все-таки хотите хранить макросы в отдельном файле, эту книгу нужно сохранить, выбрав тип файла Книга Excel с поддержкой макросов. В противном случае после закрытия книги макросы будут стерты.

  •  Выбираем Сохранить в… —  Личная книга макросов и нажимаем Ок (рис. 1).

Рис. 1. Запись макроса в личную книгу макросов

  •  Записываем в макрос действия, которые хотим выполнить: вызываем контекстное меню Формат ячеек (можно воспользоваться комбинацией клавиш Сtrl+1) и задаем нужный нам формат числа: на закладке Число идем в блок (все форматы) и выбираем там формат вида # ##0.

К сведению

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

  •  На закладке Вид — Макросы выбираем пункт Остановить запись.

Второй, более быстрый способ остановить запись макроса — нажать на появившийся в левом нижнем углу синий квадратик (рис. 2.).

Мы рекомендуем

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

Проверяем, что макрос записан и работоспособен:

  •  в ячейку А2 вбиваем любое шестизначное число;
  •  запускаем макрос одним из двух способов: на закладке Вид — Макросы выбираем пункт Макросы или нажимаем комбинацию клавиш Alt+F8, находим в списке наш макрос и нажимаем кнопку Выполнить.

Рис. 2. Форматирование числа и остановка записи макроса

Итак, вы записали свой первый макрос! Примите поздравления. Теперь давайте познакомимся с личной книгой макросов и синтаксисом написания команд для макроса.

Личная книга макросов

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

Мы убедились, что книга открыта, но отображать ее не будем, чтобы потом по ошибке не закрыть ее. По сути, в этой книге нас интересует так называемый Исходный текст — блок, в котором записываются макросы. Чтобы увидеть это окно, нажмите клавиши Alt+F11 или кликните правой кнопкой мыши на ярлыке любого листа Excel и выберите в контекстном меню Исходный текст. Откроется окно VBA-кодирования в Excel (рис. 3). Оно состоит из двух блоков:

1. В левой части экрана окно Project – VBAProject — это проводник, в котором отображаются все открытые в данный момент книги Excel (даже если вы их не видите, как, например, книгу Personal). Работа с этим блоком аналогична работе в обычном проводнике — двойной клик по наименованию книги раскрывает ее содержимое. Нас интересует блок Modules — Module1. Кликаем левой кнопкой мыши дважды по этому объекту.

2. В правой части экрана откроется блок записи и редактирования макросов. Здесь уже автоматически записался Макрос1. Рассмотрим на его примере основную канву макроса.

Рис. 3. Окно VBA-кодирования в Excel

Синтаксис макроса

Макросы — это команды, написанные на языке VBA (Visual Basic for Applications). И синтаксис кода макроса не отличается от записи кода в Visual Basic.

Любой макрос имеет следующий вид:

Sub Имя_Макроса_Без_Пробелов()

‘ комментарии к макросу — они нужны для вас, VBA не воспринимает такие строки как команды

команды, написанные на языке VBA

End Sub

3 обязательных блока макроса:

1. Начало макроса. Всегда начинается с команды Sub. Далее идет имя макроса — оно может быть на русском языке, но не должно содержать пробелы и специальные символы.

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

2. Блок команд. В нашем примере он состоит из одной строки: Selection.NumberFormat = «#,##0»

Каждая команда должна начинаться с новой строки. Если текст команды очень длинный и не помещается на экране, его можно разбить на несколько строк, заканчивая строку символом нижнего подчеркивания _ (далее в примере мы это увидим).

3. Конец макроса. Всегда обозначается как End Sub.

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

Обратите внимание!

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

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

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

Нам необходимо:

  •  выделить групповые строки полужирным шрифтом;
  •  отформатировать на печать — расположить отчет по центру листа, задать масштаб 75 %, вывести в колонтитулы название отчета (рис. 4).

Рис. 4. Изменения после написания макроса

Запишем алгоритм форматирования отчета в макрос.

Нажимаем кнопку записи макроса и выполняем следующие действия:

  •  Даем макросу имя Форматирование_БДР, в блоке описания записываем, что будет делать этот макрос (например, Выделяет жирным курсивом итоги, форматирует на печать). Жмем Ок.
  •  Выделяем столбцы А:С, ставим автофильтр — на закладке Данные находим кнопку Фильтр.
  •  По столбцу КОД задаем условие не содержит точку: Текстовые фильтры — Не содержит и в поле текста ставим символ точки без пробелов (рис. 5).

Рис. 5. Использование автофильтра по столбцу «КОД»

  •  Выделяем отфильтрованный диапазон и задаем ему полужирный шрифт.
  •  Снимаем автофильтр (повторное нажатие на закладке Данные кнопки Фильтр).
  •  Заходим в меню форматирования на печать (Кнопка Файл/Office — Печать — Предварительный просмотр — Параметры страницы) и задаем там три параметра:

1) на вкладке Страница задаем масштаб 75 %;

2) на вкладке Поля отмечаем пункт Горизонтально в блоке Центрировать на странице;

3) на вкладке Колонтитулы создаем верхний колонтитул с текстом Бюджет на январь.

  •  Выходим из параметров страницы.
  •  Заканчиваем запись макроса.
  •  Нажимаем Alt+F11 и смотрим, что получилось (см. рис. 4).

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

Правила написания команд в VBA

Любая команда макроса состоит из двух блоков, разделенных точкой:

Объект.Действие с объектом или свойство объекта

Объектами в Excel являются, например:

  •  книга: WorkBook, ActiveWorkbook;
  •  лист, листы: WorkSheet, ActiveSheet, Sheets;
  •  ячейка: Cells(1,1) — в скобках указываются номера строки (Row) и столбца (Column) ячейки на листе;
  •  диапазон ячеек (может быть и одна ячейка): Range(«А1:С5»), Range(«А1»);
  •  строки (Rows);
  •  столбцы (Columns);
  •  выделение (Selection) — выделенный в данный момент диапазон (это может быть как несколько смежных ячеек, так и смежные строки или столбцы).

Примеры действий с объектами:

  •  ActiveWorkbook.Save — сохранить рабочую книгу (та, которая была активна в момент вызова пользователем макроса);
  •  Sheets(«Лист3»).Name = «Отчет» — переименовать «Лист3» в «Отчет»;
  •  Sheets(«Отчет»).Activate — перейти на лист с названием «Отчет»;
  •  Range(«А1»).Copy — скопировать в буфер обмена данные из ячейки А1;
  •  Rows(«13:13»).Delete Shift:=xlUp — удалить строку 13 со сдвигом вверх.

Примеры свойств объектов:

  •  ActiveCell.FormulaR1C1 = «БДР» — в выделенной (активной) ячейке записан текст «БДР»;
  •  ActiveCell.Row < 65 — номер ряда активной ячейки меньше 65.

Помнить все названия объектов, команд и свойств для написания несложных макросов не обязательно. Вы всегда можете сначала записать ваши стандартные действия с отчетами в Excel, а потом отформатировать код макроса, убрав из него лишние действия или заменив некоторые заданные параметры (например, длину диапазона) на переменные (которые в дальнейшем макрос будет запрашивать у пользователя или рассчитывать самостоятельно).

Но об этом мы расскажем далее, а сейчас обратимся к коду нашего первого макроса, состоящего из одной строки:

Selection.NumberFormat = «#,##0»

Суть его в следующем: к объекту Выделенный диапазон (у нас одна ячейка, но это может быть и весь столбец/строка или диапазон смежных ячеек) применяется свойство Числовой формат вида # ##0 (если помните, именно этот формат мы выбрали в списке).

Код макроса Форматирование_БДР и расшифровка строк кода представлены в таблице.

 

Строка кода

Расшифровка

Sub Форматирование_БДР()

Начало макроса, имя макроса

Пустая строка комментариев (ставится автоматически при записи макроса)

‘ Форматирование_БДР Макрос

Автоматически добавленный комментарий при записи макроса — может быть удален без потери работоспособности макроса

‘ Выделяем жирным курсивом итоги, форматируем на печать

Автоматически добавленный комментарий при записи макроса из поля Описание

Пустая строка — не влияет на суть исполнения макроса, но их полезно добавлять для разделения блоков команд внутри кода

   Columns(«A:C»).Select

Выделить (Select) объект Столбцы (Columns) А:С

    Selection.AutoFilter

Применить автофильтр (AutoFilter) для выделенного диапазона (Selection)

    ActiveSheet.Range(«$A$1:$C$34″).AutoFilter Field:=1, Criteria1:=»<>*.*», _

Задать критерий отбора «не содержит точку»

        Operator:=xlAnd

Продолжение команды из предыдущей строки.

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

    Range(«A1:C34»).Select

Выделить (Select) объект Диапазон (Range) А1:С34.

Обратите внимание: какой бы длины ни был ваш следующий отчет, для которого вы будете применять этот макрос, выделится всегда только диапазон до 34 строки!

Как сделать этот диапазон любой длины — обсудим немного позже

    Selection.Font.Bold = True

Для выделенного диапазона (Объект Selection) установить свойство «полужирный шрифт» (Font.Bold = True). Если нужно отменить какое-то свойство, пишем False

    Selection.AutoFilter

Снять автофильтр (при записи макроса это было повторное нажатие кнопки Фильтр на закладке Данные)

    With ActiveSheet.PageSetup

Начало процедуры With (используется, если далее перечисляются свойства или действия с одним и тем же объектом для компактности записи кода).

Для объекта ActiveSheet (Текущий лист) применить следующие параметры свойства PageSetup (Параметры печати):

        .PrintTitleRows = «»

Печатать на каждой странице сквозные строки — пусто (то есть данное свойство не задано пользователем)

        .PrintTitleColumns = «»

Печатать на каждой странице сквозные столбцы — пусто

    End With

Окончание процедуры With

    ActiveSheet.PageSetup.PrintArea = «»

Заданная область печати — пусто (то есть пользователь не ограничил область печати, следовательно, на экран будет выведено все, что есть на листе)

    With ActiveSheet.PageSetup

Начало процедуры With

Для объекта Текущий лист применить следующие параметры печати (цветом выделены те, которые мы изменили по сравнению со стандартными):

        .LeftHeader = «»

Левый верхний колонтитул — пусто

        .CenterHeader = «Бюджет на январь»

Центральный верхний колонтитул — задан текст пользователем

        .RightHeader = «»

Правый верхний колонтитул — пусто

        .LeftFooter = «»

Левый нижний колонтитул — пусто

        .CenterFooter = «»

Центральный нижний колонтитул — пусто

        .RightFooter = «»

Правый нижний колонтитул — пусто

        .LeftMargin = Application.InchesToPoints(0.708661417322835)

Размеры левого поля

        .RightMargin = Application.InchesToPoints(0.708661417322835)

Размеры правого поля

        .TopMargin = Application.InchesToPoints(0.748031496062992)

Размеры верхнего поля

        .BottomMargin = Application.InchesToPoints(0.748031496062992)

Размеры нижнего поля

        .HeaderMargin = Application.InchesToPoints(0.31496062992126)

Размеры верхнего колонтитула

        .FooterMargin = Application.InchesToPoints(0.31496062992126)

Размеры нижнего колонтитула

        .PrintHeadings = False

Не печатать заголовки строк и столбцов (False — пользователь не отметил этот пункт)

        .PrintGridlines = False

Не печатать сетку

        .PrintComments = xlPrintNoComments

Не печатать примечания

        .PrintQuality = 600

Качество печати — 600 точек на дюйм

        .CenterHorizontally = True

Центрировать на странице горизонтально (True — пользователь отметил этот пункт)

        .CenterVertically = False

Не центрировать по вертикали

        .Orientation = xlPortrait

Ориентация страницы — книжная

        .Draft = False

Пользователь не отметил пункт Черновая в блоке Печать

        .PaperSize = xlPaperA4

Размер бумаги А4

        .FirstPageNumber = xlAutomatic

Номер первой страницы — автоматически

        .Order = xlDownThenOver

Последовательность вывода страниц: вниз, потом вправо (пункт в блоке Печать)

        .BlackAndWhite = False

Пользователь не отметил пункт Черно-белая в блоке Печать

        .Zoom = 75

Масштаб 75 %

        .PrintErrors = xlPrintErrorsDisplayed

Пункт в блоке ПечатьОшибки ячеекКак на экране

        .OddAndEvenPagesHeaderFooter = False

Пользователь не задавал разные колонтитулы для четных и нечетных страниц (флажок в блоке Колонтитулы)

        .DifferentFirstPageHeaderFooter = False

Пользователь не задавал отдельный колонтитул для первой страницы (флажок в блоке Колонтитулы)

        .ScaleWithDocHeaderFooter = True

Флажок в блоке Колонтитулы – Изменять вместе с масштабом страницы отмечен пользователем

        .AlignMarginsHeaderFooter = True

Флажок в блоке Колонтитулы – Выровнять относительно полей страницы отмечен пользователем

        .EvenPage.LeftHeader.Text = «»

Текст колонтитулов для четных и первой страниц не задан

        .EvenPage.CenterHeader.Text = «»

        .EvenPage.RightHeader.Text = «»

        .EvenPage.LeftFooter.Text = «»

        .EvenPage.CenterFooter.Text = «»

        .EvenPage.RightFooter.Text = «»

        .FirstPage.LeftHeader.Text = «»

        .FirstPage.CenterHeader.Text = «»

        .FirstPage.RightHeader.Text = «»

        .FirstPage.LeftFooter.Text = «»

        .FirstPage.CenterFooter.Text = «»

        .FirstPage.RightFooter.Text = «»

    End With

Окончание процедуры With

End Sub

Окончание кода макроса

Редактирование макроса

Как видите, код макроса легко читаем и понятен. Кроме того, нам не надо нагромождать его лишними строками: так как в параметрах печати мы меняли только три пункта, остальные строки можем удалить (они будут установлены по умолчанию). Удалим ненужные строки, поставим комментарии и в итоге получим вот такой элегантный код:

Sub Форматирование_БДР()

‘ Макрос выделяет жирным курсивом итоги, форматирует отчет на печать

‘——————

‘ Выделяем столбцы и ставим фильтр по столбцу КОД

 Columns(«A:C»).Select

 Selection.AutoFilter

 ActiveSheet.Range(«$A$1:$C$34″).AutoFilter Field:=1, Criteria1:=»<>*.*», _

 Operator:=xlAnd

‘ Выделяем отфильтрованный диапазон полужирным шрифтом, снимаем фильтр

 Range(«A1:C34»).Select

 Selection.Font.Bold = True

 Selection.AutoFilter

 ‘ Форматируем на печать: верхний колонтитул, центрирование по горизонтали, масштаб 75 %

 With ActiveSheet.PageSetup

 .CenterHeader = «Бюджет на январь»

 .CenterHorizontally = True

 .Zoom = 75

 End With

End Sub

Ввод в код макроса функций и процедур

Теперь усложним код макроса, задав ему два параметра:

1. Название месяца отчета запрашиваем у пользователя.

2. Последняя строка отчета БДР (в случае если она плавающая) рассчитывается в коде макроса.

Функция InputBox

Чтобы запросить у пользователя месяц отчета, воспользуемся функцией Inputbox, которая выводит диалоговое окно, в котором пользователь может самостоятельно задать значение переменной, используемой в коде. Синтаксис функции InputBox:

Zapros = InputBox(«Текст запроса», <«Текст в шапке окна»>, <Значение по умолчанию>,…)

где Zapros — введенная вами переменная (имя придумываете вы сами), а в скобках через запятую перечисляются аргументы функции.

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

Для удобства присвойте полученное значение функции InputBox какой-нибудь введенной вами переменной, особенно если в коде макроса вы будете несколько раз использовать значение этой функции.

Важно

Имена вводимых переменных не должны совпадать с уже занятыми VBA словами под название объектов, свойств или функций!

В нашем примере присвоим результат вызова функции InputBox переменной Mes.

Например, нельзя завести свою переменную Range, Cells или Month — компилятор VBA предупредит вас, что делать этого нельзя, и не запустит макрос, пока вы не устраните ошибку (рис. 6).

Рис. 6. Пример ошибки при заведении переменной

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

Итак, приступим к редактированию кода макроса. Добавим в самое начало кода макроса строки:

‘ Запрашиваем у пользователя месяц отчета

Mes = InputBox(«Введите название месяца отчета», , «Январь»)

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

Рис. 7. Диалоговое окно для указания месяца

С помощью функции InputBox можно запросить у пользователя и длину отчета. Но мы научим Excel высчитывать ее самостоятельно. Для этого нам потребуется процедура While.

Процедура While

Используется в коде, если надо сделать одинаковые действия несколько раз подряд до тех пор, пока выполняется какое-либо условие. Синтаксис процедуры While:

Do While <условие, которое должно быть верным для выполнения процедуры>

 <список команд>

Loop

Условие может состоять из одного выражения или содержать несколько, перечисленных через оператор AND (то есть оба условия должны быть выполнены) или OR (достаточно выполнения только одного из перечисленных условий). Также условие обязательно должно содержать переменную-счетчик (это может быть номер строки или столбца ячейки, значения которой вы проверяете).

В список команд обязательно должна входить команда наращивания переменной-счетчика, иначе процедура зациклится (так как она постоянно будет сравнивать одно и то же значение) и макрос придется прерывать принудительно.

Если макрос ушел в цикл, прервите его с помощью комбинации клавиш Ctrl+Break и либо прекратите макрос (кнопка End), либо зайдите в код макроса и исправьте ошибку (кнопка Debug). Чтобы макрос не уходил в цикл, рекомендуется включить в блок условий «защиту от дурака». Например, добавляем в условие проверку, чтобы значение счетчика не превышало определенной, заведомо достаточной для нас величины.

Рассмотрим применение процедуры While для поиска конца отчета БДР.

Как видно на рис. 4, последняя строка отчета имеет код «500». Напишем процедуру, которая будет проверять значения в ячейках столбца «А» и остановит свои действия, когда найдет ячейку с кодом «500».

Обратите внимание!

Excel иногда воспринимает числа как текст, поэтому включим два условия проверки значения ячейки и добавим «защиту от дурака» на случай, если в форме отчета случайно затрется код последней строки.

Помним, что все текстовые значения надо брать в кавычки. Числа записываем без кавычек:

‘ Ищем последнюю строку отчета

Dim Row_End As Integer     ‘ Вводим переменную «счетчик номера строки»

Row_End = 1             ‘ Присваиваем ей номер 1

‘ Начинаем процедуру поиска последней строки отчета по коду «500»

Do While Cells(Row_End, 1).Value <> «500» And Cells(Row_End, 1).Value <> 500 And Row_End < 100

‘ До тех пор, пока код не равен 500 и номер строки меньше 100, выполняем наращивание счетчика

Row_End = Row_End +1

Loop

Таким образом, процедура While нам нужна только для наращивания счетчика — никаких дополнительных действий она не производит. Запомните этот прием — он часто нужен в кодировании.

Теперь заменим в изначальном коде макроса номер последней ячейки (34) на переменную Row_End. Число 34 было частью текста А1:С34, а теперь нам надо часть текста заменить на переменную. Делается это с помощью символа амперсанд &:

«текст» & переменная & «текст».

В нашем случае ссылка на диапазон А1:С34 будет записана так: А1:С & Row_End.

Кроме того, вспоминаем, что и название отчета Бюджет на январь у нас тоже теперь содержит параметр и будет записываться так: Бюджет на & Mes.

Не забывайте оставлять пробелы в кавычках перед переменной-словом, иначе текст сольется.

Еще раз взглянем на получившийся код макроса:

Sub Форматирование_БДР()

‘ Макрос выделяет жирным курсивом итоги, форматирует отчет на печать

‘ ——————

‘ Запрашиваем у пользователя месяц отчета

Mes = InputBox(«Введите название месяца отчета», , «Январь»)

‘ Ищем последнюю строку отчета

Dim Row_End As Integer     ‘ Вводим переменную «счетчик номера строки»

Row_End = 1             ‘ Присваиваем ей номер 1

‘ Начинаем процедуру поиска последней строки отчета по коду «500»

‘ Критичным значением для «защиты от дурака» принимаем номер строки 100

Do While Cells(Row_End, 1).Value <> «500» And Cells(Row_End, 1).Value <> 500 And Row_End < 100

‘ До тех пор, пока код не равен 500 и номер строки меньше 100, выполняем наращивание счетчика

Row_End = Row_End +1

Loop

‘ Выделяем столбцы и ставим фильтр на КОД

 Columns(«A:C»).Select

 Selection.AutoFilter

 ActiveSheet.Range(«$A$1:$C$» & Row_End).AutoFilter Field:=1, Criteria1:=»<>*.*», _

 Operator:=xlAnd

‘ Выделяем отфильтрованный диапазон полужирным шрифтом, снимаем фильтр

 Range(«A1:C» & Row_End).Select

 Selection.Font.Bold = True

 Selection.AutoFilter

‘ Форматируем на печать: верхний колонтитул, центрирование по горизонтали, масштаб 75 %

 With ActiveSheet.PageSetup

 .CenterHeader = «Бюджет на » & Mes

 .CenterHorizontally = True

 .Zoom = 75

 End With

End Sub

Теперь макрос стал более универсальным. Добавим в него еще одну «защиту от дурака».

Если нам принципиально, правильно ли макрос нашел последнюю строку отчета, после окончания процедуры While (строка Loop) можно добавить блок проверки значения Row_End и запроса у пользователя подтверждения на продолжение макроса.

Для этого изучим функцию MsgBox, процедуру IF и команду Exit Sub.

Функция MsgBox

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

Она имеет два вида записи:

1. Мы просто сообщаем пользователю какую-то информацию. В этом случае аргументы функции перечисляются сразу же за функцией, без использования скобок:

MsgBox «Текст сообщения», <Вид кнопок>, <«Текст в шапке окна»>,…

На экране отобразится диалоговое окно, и после нажатия пользователем кнопки Ок продолжится выполнение макроса (рис. 8).

Рис. 8. Первый вид записи функции MsgBox

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

2. Нам важно, что ответил пользователь, мы записываем его ответ в значение какой-то переменной (рис. 9). В этом случае аргументы функции заключаются в скобки, а перед функцией обязательно должна стоять переменная, в которую мы записываем, на какую кнопку нажал пользователь:

YesNo = MsgBox(«Текст сообщения», <Вид кнопок>, <«Текст в шапке окна»>,…)

Рис. 9. Второй вид записи функции MsgBox

Варианты вида кнопок:

  •  vbOKOnly — только кнопка ОК;
  •  vbOKCanсel — кнопки ОК и Cancel;
  •  vbYesNo — кнопки Yes и No;
  •  vbYesNoCancel — кнопки Yes, No и Cancel.

Соответственно в зависимости от нажатой кнопки значения функции MsgBox могут быть vbOK, vbCancel, vbYes или vbNo.

Процедура If

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

If <условие, которое должно быть верным> Then

 <список команд при выполнении указанного условия>

else

 <список команд при невыполнении указанного условия>

End If

Обязательным к заполнению является только условие. Список команд в обоих блоках заполнять не обязательно. В зависимости от ваших задач вы можете заполнить оба блока или только один из них. Условие может состоять из одного выражения или содержать несколько выражений, перечисленных через оператор AND (то есть оба условия должны быть выполнены) или оператор OR (достаточно выполнения только одного из перечисленных условий).

Команда Exit Sub

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

Итак, объединим новые знания в код «защиты от дурака» и запишем его после строки Loop:

‘ Проверяем, дошла ли процедура While до «критичной» строки 100

‘ и спрашиваем подтверждение о продолжении выполнения макроса

If Row_End = 100 Then      

YesNo = MsgBox(«Поиск последней строки отчета дошел до 100, продолжаем?», vbYesNo)

If YesNo = vbNo Then          ‘ Если нажата кнопка «No», то…

MsgBox «Процедура прервана пользователем»   ‘ 1. выдаем сообщение для пользователя,

Exit Sub          ‘ 2. останавливаем макрос

End If

End If

В нашем коде прошло вложение одной процедуры If в другую:

  •  сначала мы проверили, дошел ли счетчик Row_End до значения 100;
  •  если дошел, мы спрашиваем у пользователя, продолжать ли нам выполнение макроса;
  •  если пользователь ответил «нет», останавливаем макрос.

В обеих процедурах If мы опустили второй блок (else): если Row_End не достиг значения 100 или пользователь ответил «да», макрос просто покинет процедуру If и продолжит выполнять команды, написанные ниже.

Каждая процедура If должна заканчиваться командой End If. Если количество строк с командой If не будет соответствовать количеству строк с командой End If, компилятор VBA сообщит об ошибке и вам придется искать, где вы потеряли конец процедуры If.

Поэтому рекомендуется сразу писать обе строки, а потом уже наполнять процедуру командами.

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

Подведем итоги

Мы с вами научились:

  •  записывать макросы через команду Вид  Макросы  Запись макроса;
  •  редактировать автоматически записанный макрос, удалять из него лишние команды;
  •  унифицировать код макроса, вводя в него переменные, которые макрос запрашивает у пользователя или рассчитывает самостоятельно,

а также изучили функции InputBox и MsgBox, процедуры While и If, команду Exit Sub.

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


Статья опубликована в журнале «Справочник экономиста» № 4, 2016.

#Руководства

  • 23 май 2022

  • 0

Как с помощью макросов автоматизировать рутинные задачи в Excel? Какие команды они выполняют? Как создать макрос новичку? Разбираемся на примере.

Иллюстрация: Meery Mary для Skillbox Media

Ксеня Шестак

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

Макрос (или макрокоманда) в Excel — алгоритм действий в программе, который объединён в одну команду. С помощью макроса можно выполнить несколько шагов в Excel, нажав на одну кнопку в меню или на сочетание клавиш.

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

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

В статье разберёмся:

  • как работают макросы и как с их помощью избавиться от рутины в Excel;
  • какие способы создания макросов существуют и как подготовиться к их записи;
  • как записать и запустить макрос начинающим пользователям — на примере со скриншотами.

Общий принцип работы макросов такой:

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

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

  • Автоматизировать повторяющиеся процедуры.

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

  • Объединять работу нескольких программ Microsoft Office.

    Например, с помощью одного макроса можно создать таблицу в Excel, вставить и сохранить её в документе Word и затем отправить в письме по Outlook.

  • Искать ячейки с данными и переносить их в другие файлы.

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

  • Форматировать таблицы и заполнять их текстом.

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

  • Создавать шаблоны для ввода данных.

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

  • Создавать новые функции Excel.

    Если пользователю понадобятся дополнительные функции, которых ещё нет в Excel, он сможет записать их самостоятельно. Все базовые функции Excel — это тоже макросы.

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

В Excel и других программах Microsoft Office макросы создаются в виде кода на языке программирования VBA (Visual Basic for Applications). Этот язык разработан в Microsoft специально для программ компании — он представляет собой упрощённую версию языка Visual Basic. Но это не значит, что для записи макроса нужно уметь кодить.

Есть два способа создания макроса в Excel:

  • Написать макрос вручную.

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

  • Записать макрос с помощью кнопки меню Excel.

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

Разберёмся на примере, как создать макрос с помощью второго способа.

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

Так выглядят таблицы с продажами автосалона в первоначальном виде
Скриншот: Skillbox Media

Пользоваться таким отчётом неудобно — нужно сделать его наглядным. Запишем макрос при форматировании таблицы с продажами за январь и затем применим его к двум другим таблицам.


Готовимся к записи макроса

Кнопки для работы с макросами в Excel находятся во вкладке «Разработчик». Эта вкладка по умолчанию скрыта, поэтому для начала разблокируем её.

В операционной системе Windows это делается так: переходим во вкладку «Файл» и выбираем пункты «Параметры» → «Настройка ленты». В открывшемся окне в разделе «Основные вкладки» находим пункт «Разработчик», отмечаем его галочкой и нажимаем кнопку «ОК» → в основном меню Excel появляется новая вкладка «Разработчик».

В операционной системе macOS это нужно делать по-другому. В самом верхнем меню нажимаем на вкладку «Excel» и выбираем пункт «Параметры…».

Нажимаем сюда, чтобы вызвать панель с дополнительными параметрами Excel в macOS
Скриншот: Skillbox Media

В появившемся окне нажимаем кнопку «Лента и панель».

Выбираем параметр «Лента и панель»
Скриншот: Skillbox Media

Затем в правой панели «Настроить ленту» ищем пункт «Разработчик» и отмечаем его галочкой. Нажимаем «Сохранить».

Отмечаем пункт «Разработчик» и сохраняем изменения
Скриншот: Skillbox Media

Готово — вкладка «Разработчик» появилась на основной панели Excel.

Теперь можно работать с макросами
Скриншот: Skillbox Media

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

Перед записью макросов нужно сохранить документ в формате с их поддержкой
Скриншот: Skillbox Media

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

  • Макрос записывает все действия пользователя.

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

  • Работу макроса нельзя отменить.

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

  • Макрос выполняет свой алгоритм только для записанного диапазона таблиц.

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

Для начала записи макроса перейдём на вкладку «Разработчик» и нажмём кнопку «Записать макрос».

Нажимаем сюда, чтобы начать запись макроса
Скриншот: Skillbox Media

Появляется окно для заполнения параметров макроса. Нужно заполнить поля: «Имя макроса», «Сохранить в», «Сочетание клавиш», «Описание».

Так выглядит окно с параметрами макроса
Скриншот: Skillbox Media

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

Первым символом в названии обязательно должна быть буква. Другие символы могут быть буквами или цифрами. Важно не использовать пробелы в названии — их можно заменить символом подчёркивания.

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

Если выбрать параметр «Эта книга», макрос будет доступен при работе только в этом файле Excel. Чтобы макрос был доступен всегда, нужно выбрать параметр «Личная книга макросов» — Excel создаст личную книгу макросов и сохранит новый макрос в неё.

«Сочетание клавиш» — здесь к уже выбранным двум клавишам (Ctrl + Shift в системе Windows и Option + Cmd в системе macOS) нужно добавить третью клавишу. Это должна быть строчная или прописная буква, которую ещё не используют в других быстрых командах компьютера или программы Excel.

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

«Описание» — необязательное поле, но лучше его заполнять. Например, можно ввести туда последовательность действий, которые планируется записать в этом макросе. Так не придётся вспоминать, какие именно команды выполнит этот макрос, если нужно будет запустить его позже. Плюс будет проще ориентироваться среди других макросов.

В нашем случае с форматированием таблицы заполним поля записи макроса следующим образом и нажмём «ОК».

Заполняем поля и жмём «ОК», чтобы начать запись
Скриншот: Skillbox Media

После этого начнётся запись макроса — в нижнем левом углу окна Excel появится значок записи.

Началась запись макроса — теперь в него попадут все клики мышки и нажатия клавиш
Скриншот: Skillbox Media

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

Важно: в нашем случае у таблиц продаж за январь, февраль и март одинаковое количество столбцов, но разное количество строк. Чтобы в случае со второй и третьей таблицей макрос сработал корректно, при форматировании выделим диапазон так, чтобы в него попали не только строки самой таблицы, но и строки ниже неё. Для этого нужно выделить столбцы в строке с их буквенным обозначением A–G, как на рисунке ниже.

Так макрос будет работать и для таблиц с большим количеством строк
Скриншот: Skillbox Media

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

Так макрос отформатирует только выбранные строки: если в других таблицах строк окажется больше, они останутся в первоначальном виде
Скриншот: Skillbox Media

После всех манипуляций с оформлением таблица примет такой вид:

Так выглядит таблица после форматирования
Скриншот: Skillbox Media

Проверяем, все ли действия с таблицей мы выполнили, и останавливаем запись макроса. Сделать это можно двумя способами:

  • Нажать на кнопку записи в нижнем левом углу.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Остановить запись».

Нажимаем сюда, чтобы остановить запись макроса
Скриншот: Skillbox Media

Готово — мы создали макрос для форматирования таблиц в границах столбцов A–G. Теперь его можно применить к другим таблицам.


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

Перейдём в лист со второй таблицей «Февраль_2022». В первоначальном виде она такая же нечитаемая, как и первая таблица до форматирования.

Так выглядит таблица до запуска макроса
Скриншот: Skillbox Media

Отформатируем её с помощью записанного макроса. Запустить макрос можно двумя способами:

  • Нажать комбинацию клавиш, которую выбрали при заполнении параметров макроса — в нашем случае Option + Cmd + Ф.
  • Перейти во вкладку «Разработчик» и нажать кнопку «Макросы».

Нажимаем сюда, чтобы вызвать панель для выбора макроса
Скриншот: Skillbox Media

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

Нажимаем сюда, чтобы запустить макрос для форматирования таблицы
Скриншот: Skillbox Media

Готово — вторая таблица с помощью макроса форматируется так же, как и первая.

За пару секунд с помощью макроса исходная таблица принимает такой вид
Скриншот: Skillbox Media

То же самое можно сделать и на третьем листе для таблицы продаж за март. Более того, этот же макрос можно будет запустить и в следующем квартале, когда сервис автосалона выгрузит таблицы с новыми данными.

Научитесь: Excel + Google Таблицы с нуля до PRO
Узнать больше

Понравилась статья? Поделить с друзьями:
  • Макросы в excel как обратиться к ячейке
  • Макросы в excel начало работы
  • Макросы в excel как написать макрос
  • Макросы в excel найти заменить
  • Макросы в excel как искать