Оглавление
Из этого учебника вы узнаете, как записать макрос и вставить код VBA в Excel, копировать макросы из одной рабочей книги в другую, включать и отключать их, просматривать код, вносить изменения и многое другое.
Для новичков в Excel концепция макросов часто кажется непреодолимой. Действительно, для освоения VBA могут потребоваться месяцы или даже годы обучения. Однако это не означает, что вы не можете воспользоваться возможностями автоматизации макросов Excel прямо сейчас. Даже если вы полный новичок в программировании на VBA, вы можете легко записать макрос для автоматизации некоторых повторяющихся задач.
В этой статье вы познакомитесь с увлекательным миром макросов Excel. В ней рассматриваются основы, которые необходимо знать для начала работы, а также даются ссылки на соответствующие подробные учебные пособия.
Что такое макросы в Excel?
Макрос Excel - это набор команд или инструкций, хранящихся в рабочей книге в виде кода VBA. Его можно рассматривать как небольшую программу для выполнения заранее определенной последовательности действий. Созданный однажды макрос можно использовать повторно в любое время. Запуск макроса приводит к выполнению содержащихся в нем команд.
Как правило, макросы используются для автоматизации повторяющихся задач и повседневных действий. Опытные разработчики VBA могут написать действительно сложные макросы, которые выходят далеко за рамки сокращения количества нажатий клавиш.
Довольно часто можно услышать, как люди называют "макрос" "VBA". Технически, существует различие: макрос - это часть кода, а Visual Basic for Applications (VBA) - это язык программирования, созданный Microsoft для написания макросов.
Зачем использовать макросы Excel?
Основная цель макросов - сделать больше работы за меньшее время. Как вы используете формулы для подсчета чисел и работы с текстовыми строками, вы можете использовать макросы для автоматического выполнения частых задач.
Допустим, вы должны создать еженедельный отчет для своего руководителя. Для этого вы импортируете различные аналитические данные из пары или более внешних ресурсов. Проблема в том, что эти данные беспорядочны, избыточны или не имеют формата, понятного Excel. Это означает, что вам нужно переформатировать даты и числа, обрезать лишние пробелы и удалить пробелы, скопировать и вставить информацию в соответствующие колонки,строить графики для визуализации тенденций и делать еще много разных вещей, чтобы сделать ваш отчет понятным и удобным для пользователя. А теперь представьте, что все эти операции могут быть выполнены для вас мгновенно, одним щелчком мыши!
Конечно, создание сложного макроса требует времени. Иногда это может занять даже больше времени, чем выполнение тех же манипуляций вручную. Но создание макроса - это одноразовая установка. После написания, отладки и тестирования код VBA будет выполнять работу быстро и безупречно, сводя к минимуму человеческий фактор и дорогостоящие ошибки.
Как создать макрос в Excel
Существует два способа создания макросов в Excel - с помощью Macro Recorder и Visual Basic Editor.
Совет. В Excel большинство операций с макросами выполняется с помощью команды Разработчик вкладки, поэтому не забудьте добавить вкладку "Разработчик" на ленту Excel.
Запись макроса
Даже если вы ничего не знаете о программировании в целом и о VBA в частности, вы можете легко автоматизировать часть своей работы, просто позволив Excel записать ваши действия в виде макроса. Пока вы выполняете действия, Excel внимательно следит и записывает ваши щелчки мышью и нажатия клавиш на языке VBA.
Macro Recorder фиксирует практически все, что вы делаете, и создает очень подробный (часто избыточный) код. После остановки записи и сохранения макроса вы можете просмотреть его код в редакторе Visual Basic и внести небольшие изменения. Когда вы запускаете макрос, Excel возвращается к записанному коду VBA и выполняет точно такие же движения.
Чтобы начать запись, нажмите кнопку Макрос записи кнопка на Разработчик вкладка или Статус бар.
Подробную информацию см. в разделе Как записать макрос в Excel.
Написание макроса в редакторе Visual Basic
Редактор Visual Basic for Applications (VBA) - это место, где Microsoft Excel хранит код всех макросов, как записанных, так и написанных вручную.
В редакторе VBA вы можете не только программировать последовательность действий, но и создавать пользовательские функции, выводить собственные диалоговые окна, оценивать различные условия и, самое главное, кодировать логику! Естественно, создание собственного макроса требует определенных знаний структуры и синтаксиса языка VBA, что выходит за рамки данного учебника для начинающих. Но нет ничего такого, что могло быпредотвращает повторное использование чужого кода (скажем, того, который вы нашли в нашем блоге :)), и даже полный новичок в Excel VBA не должен испытывать трудностей с этим!
Сначала нажмите Alt + F11, чтобы открыть редактор Visual Basic. А затем вставьте код в эти два быстрых шага:
- В проводнике проекта слева щелкните правой кнопкой мыши целевую рабочую книгу, а затем щелкните Вставка > Модуль .
- В окне Код справа вставьте код VBA.
После этого нажмите F5, чтобы запустить макрос.
Подробные шаги см. в статье Как вставить код VBA в Excel.
Как запустить макросы в Excel
Существует несколько способов запустить макрос в Excel:
- Чтобы запустить макрос из рабочего листа, нажмите кнопку Макросы кнопка на Разработчик вкладку или нажмите сочетание клавиш Alt + F8.
- Чтобы запустить макрос из редактора VBA, нажмите либо:
- F5 для запуска всего кода.
- F8, чтобы просмотреть код построчно. Это очень полезно для тестирования и устранения неполадок.
Кроме того, макрос можно запустить, нажав на пользовательскую кнопку или нажав назначенный ярлык. Более подробную информацию см. в разделе Как запускать макросы в Excel.
Как включить макросы в Excel
Из соображений безопасности все макросы в Excel по умолчанию отключены. Поэтому, чтобы использовать магию кодов VBA в своих интересах, необходимо знать, как их включить.
Самый простой способ включить макросы для конкретной рабочей книги - щелкнуть по кнопке Включить содержание кнопку в желтой предупреждающей полосе безопасности, которая появляется в верхней части листа при первом открытии рабочей книги с макросами.
Чтобы узнать больше о безопасности макросов, см. раздел Как включать и отключать макросы в Excel.
Как изменить настройки макроса
Microsoft Excel определяет, разрешать или запрещать выполнение кодов VBA в рабочих книгах, на основе настройки макроса, выбранной в параметре Центр "Доверие .
Ниже описаны шаги для доступа к настройкам макроса Excel и их изменения при необходимости:
- Перейти к Файл вкладку и выберите Опции .
- На левой панели выберите Центр "Доверие , а затем нажмите Настройки центра доверия... .
- В Центр "Доверие диалоговое окно, нажмите Настройки макросов слева, выберите нужную опцию и нажмите кнопку OK .
На скриншоте ниже выбрана настройка макроса по умолчанию:
Для получения дополнительной информации см. раздел "Настройки макросов Excel".
Как просматривать, редактировать и отлаживать коды VBA в Excel
Любые изменения в коде макроса, независимо от того, сгенерирован ли он автоматически программой записи макросов Excel или написан вами, вносятся в редакторе Visual Basic.
Чтобы открыть редактор VB, либо нажмите Alt + F11, либо щелкните по кнопке Visual Basic кнопка на Разработчик вкладка.
На просмотр и редактирование код конкретного макроса, в Исследователь проектов слева, дважды щелкните модуль, который его содержит, или щелкните модуль правой кнопкой мыши и выберите Посмотреть код . Откроется окно Код, в котором можно редактировать код.
На тестирование и отладка макроса, используйте клавишу F8. Это позволит вам просмотреть код макроса построчно, позволяя увидеть эффект, который каждая строка оказывает на ваш рабочий лист. Строка, которая выполняется в данный момент, выделена желтым цветом. Чтобы выйти из режима отладки, нажмите кнопку Сброс на панели инструментов (синий квадрат).
Как скопировать макрос в другую рабочую книгу
Вы создали макрос в одной рабочей книге и теперь хотите повторно использовать его в других файлах? Существует два способа копирования макроса в Excel:
Скопируйте модуль, содержащий макрос
Если целевой макрос находится в отдельном модуле или все макросы в модуле полезны для вас, то имеет смысл скопировать весь модуль из одной рабочей книги в другую:
- Откройте обе рабочие книги - ту, в которой содержится макрос, и ту, в которую вы хотите его скопировать.
- Откройте редактор Visual Basic.
- В панели Project Explorer найдите модуль, содержащий макрос, и перетащите его в целевую рабочую книгу.
На скриншоте ниже мы копируем Модуль1 с сайта Книга1 на Книга2 :
Копирование исходного кода макроса
Если модуль содержит много различных макросов, а вам нужен только один, то скопируйте только код этого конкретного макроса. Вот как это сделать:
- Откройте обе рабочие книги.
- Откройте редактор Visual Basic.
- В панели Project Explorer дважды щелкните модуль, содержащий макрос, который вы хотите скопировать, чтобы открыть его окно Code.
- В окне Код найдите целевой макрос, выберите его код (начинающийся с Sub и заканчивая End Sub ) и нажмите Ctrl + C, чтобы скопировать его.
- В проводнике проекта найдите целевую рабочую книгу, а затем либо вставьте в нее новый модуль (щелкните правой кнопкой мыши рабочую книгу и нажмите кнопку Вставка > Модуль ) или дважды щелкните существующий модуль, чтобы открыть его окно Код.
- В окне Код целевого модуля нажмите Ctrl + V, чтобы вставить код. Если модуль уже содержит код, прокрутите вниз до последней строки кода, а затем вставьте скопированный макрос.
Как удалить макросы в Excel
Если вам больше не нужен определенный код VBA, вы можете удалить его с помощью команды Макро диалоговое окно или редактор Visual Basic.
Удаление макроса из рабочей книги
Чтобы удалить макрос непосредственно из рабочей книги Excel, выполните следующие действия:
- На Разработчик во вкладке Код группу, нажмите кнопку Макросы или нажмите сочетание клавиш Alt + F8.
- В Макро В диалоговом окне выберите макрос, который вы хотите удалить, и нажмите кнопку Удалить .
Советы:
- Чтобы просмотреть все макросы во всех открытых файлах, выберите Все открытые рабочие тетради из Макросы в выпадающий список.
- Чтобы иметь возможность удалить макрос в личной рабочей книге макросов, необходимо сначала скрыть файл Personal.xlsb.
Удаление макроса через редактор Visual Basic
Преимуществом использования редактора VBA является то, что он позволяет удалить весь модуль со всеми содержащимися в нем макросами за один раз. Кроме того, редактор VBA позволяет удалять макросы в личной рабочей книге макросов, не скрывая ее.
Чтобы постоянно удалить модуль , выполните следующие действия:
- В Исследователь проектов , щелкните правой кнопкой мыши на модуле и выберите Удалить из контекстного меню.
- На вопрос о том, хотите ли вы экспортировать модуль перед его удалением, нажмите кнопку Нет .
На удалить определенный макрос просто удалите его исходный код прямо в окне Код. Или вы можете удалить макрос с помощью команды Инструменты меню редактора VBA:
- Из Инструменты меню, выберите Макросы . Макросы появится диалоговое окно.
- В Макросы В В раскрывающемся списке выберите проект, содержащий нежелательный макрос.
- В Имя макроса выберите макрос.
- Нажмите кнопку Удалить кнопка.
Как сохранить макросы в Excel
Чтобы сохранить макрос в Excel, записанный или написанный вручную, просто сохраните рабочую книгу как макрос (*.xlms). Вот как это сделать:
- В файле, содержащем макрос, нажмите кнопку Сохранить или нажмите Ctrl + S .
- Сайт Сохранить как появится диалоговое окно. Выберите Рабочая книга Excel с поддержкой макросов (*.xlsm) из Сохранить как тип выпадающий список и нажмите Сохранить :
Как экспортировать и импортировать макросы в Excel
Если вы хотите поделиться с кем-то своими кодами VBA или перенести их на другой компьютер, самый быстрый способ - экспортировать весь модуль в файл .bas.
Экспорт макросов
Чтобы экспортировать коды VBA, нужно сделать вот что:
- Откройте рабочую книгу, содержащую макросы.
- Нажмите Alt + F11, чтобы открыть редактор Visual Basic.
- В проводнике проекта щелкните правой кнопкой мыши модуль, содержащий макросы, и выберите пункт Файл экспорта .
- Перейдите в папку, в которой вы хотите сохранить экспортированный файл, присвойте ему имя и нажмите кнопку Сохранить .
Импорт макросов
Чтобы импортировать файл .bas с кодами VBA в Excel, выполните следующие действия:
- Откройте рабочую книгу, в которую вы хотите импортировать макросы.
- Откройте редактор Visual Basic.
- В проводнике проекта щелкните правой кнопкой мыши имя проекта и выберите Импортный файл .
- Перейдите к файлу .bas и нажмите кнопку Открыть .
Примеры макросов Excel
Одним из лучших способов изучения Excel VBA является изучение примеров кода. Ниже вы найдете примеры очень простых кодов VBA, автоматизирующих некоторые базовые операции. Конечно, эти примеры не научат вас кодированию, для этого существуют сотни профессиональных учебников по VBA. Наша цель - проиллюстрировать несколько общих особенностей VBA, которые, как мы надеемся, сделают его философию более знакомой дляты.
Скрыть все листы в рабочей книге
В этом примере мы используем ActiveWorkbook объект для возврата активной в данный момент рабочей книги и Для каждого цикл для перебора всех листов в рабочей книге по одному. Для каждого найденного листа мы устанавливаем параметр Видимый свойство xlSheetVisible .
Sub Unhide_All_Sheets() Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Visible = xlSheetVisible Next wks End SubСкрыть активный рабочий лист или сделать его очень скрытым
Чтобы управлять активным листом, используйте кнопку ActiveSheet объект. Этот пример макроса изменяет Видимый свойство активного листа на xlSheetHidden чтобы скрыть его. Чтобы сделать лист очень скрытым, установите значение Видимый свойство xlSheetVeryHidden .
Sub Hide_Active_Sheet() ActiveSheet.Visible = xlSheetHidden End SubОбъединить все объединенные ячейки в выбранном диапазоне
Если вы хотите выполнить определенные операции с диапазоном, а не со всем рабочим листом, используйте функцию Выбор Например, приведенный ниже код разгруппирует все объединенные ячейки в выбранном диапазоне одним махом.
Sub Unmerge_Cells() Selection.Cells.UnMerge End SubПоказать окно сообщения
Чтобы показать пользователям какое-либо сообщение, используйте функцию MsgBox Вот пример такого макроса в его простейшей форме:
В реальных макросах окно сообщения обычно используется для получения информации или подтверждения. Например, перед выполнением какого-либо действия (в нашем случае разделения ячеек) вы выводите на экран сообщение Да/Нет Если пользователь нажмет кнопку "Да", выделенные ячейки будут разделены.
Sub Unmerge_Selected_Cells() Dim Answer As String Answer = MsgBox( "Вы уверены, что хотите объединить эти ячейки?" , vbQuestion + vbYesNo, "Unmerge Cells" ) If Answer = vbYes Then Selection.Cells.UnMerge End If End SubЧтобы проверить код, выберите один или несколько диапазонов, содержащих объединенные ячейки, и запустите макрос. Появится следующее сообщение:
Ниже приведены ссылки на более сложные макросы, автоматизирующие сложные и трудоемкие задачи:
- Макрос для копирования листов из нескольких рабочих книг в одну
- Макросы для дублирования листов в Excel
- Макросы для упорядочивания вкладок по алфавиту в Excel
- Макрос для снятия защиты листа без пароля
- Макрос для подсчета и суммирования условно окрашенных ячеек
- Макрос для преобразования чисел в слова
- Макрос для скрытия всех рабочих листов, кроме активного листа
- Макросы для снятия скрытия листов
- Макрос для скрытия всех столбцов
- Макросы, позволяющие сделать листы очень скрытыми
- Макрос для удаления всех переносов строк в активном листе
- Макросы для удаления пустых строк
- Макрос для удаления каждой второй строки
- Макрос для удаления пустых столбцов
- Макрос для вставки каждого второго столбца
- Макросы для проверки орфографии в Excel
- Макрос для транспонирования столбцов в строки
- Макрос для переворачивания столбцов в Excel
- Макросы для настройки области печати
- Макросы для вставки разрывов страниц
Как защитить макросы Excel
Если вы хотите предотвратить просмотр, изменение или выполнение вашего макроса другими людьми, вы можете защитить его паролем.
Блокировка макроса для просмотра
Чтобы защитить коды VBA от несанкционированного просмотра и редактирования, сделайте следующее:
- Откройте редактор VBA.
- В проводнике проектов щелкните правой кнопкой мыши проект, который вы хотите заблокировать, и выберите Свойства VBAProject...
- В Свойства проекта диалоговое окно, на Защита проверьте вкладку Заблокировать проект для просмотра поле, введите пароль дважды и нажмите кнопку OK .
- Сохраните, закройте и снова откройте файл Excel.
Когда вы попытаетесь просмотреть код в редакторе Visual Basic, появится следующее диалоговое окно. Введите пароль и нажмите OK.
На разблокировать макросы просто откройте Свойства проекта диалоговое окно снова и снимите галочку с Заблокировать проект для просмотра коробка.
Примечание. Этот метод защищает код от просмотра и редактирования, но не предотвращает его выполнение.
Защитите макрос от запуска паролем
Чтобы защитить макрос от выполнения так, чтобы его могли запустить только пользователи, знающие пароль, добавьте следующий код, заменив слово "password" на ваш настоящий пароль:
Sub Password_Protect() Dim password As Variant password = Application.InputBox( "Please enter Password" , "Password Protected Macro" ) Select Case password Case Is = False 'ничего не делать Case Is = "password" 'ваш код здесь Case Else MsgBox "Incorrect Password" End Select End SubМакрос использует InputBox функция, предлагающая пользователю ввести пароль:
Если введенный пользователем пароль совпадает с жестко заданным, ваш код выполняется. Если пароль не совпадает, выводится окно сообщения "Неверный пароль". Чтобы пользователь не смог подсмотреть пароль в редакторе Visual Basic, не забудьте заблокировать макрос для просмотра, как описано выше.
Примечание. Учитывая количество различных взломщиков паролей, доступных в Интернете, важно понимать, что эта защита не является абсолютной. Вы можете рассматривать ее скорее как защиту от случайного использования.
Советы по работе с макросами Excel
Профессионалы Excel VBA придумали массу хитроумных приемов, чтобы сделать макросы более эффективными. Ниже я расскажу о нескольких своих любимых.
Если ваш код VBA активно манипулирует содержимым ячеек, вы можете ускорить его выполнение, отключив обновление экрана и пересчет формул. После выполнения вашего кода включите их снова.
Следующие строки должны быть добавлены в начало вашего кода (после строк, начинающихся с Dim или после Sub линия):
Application.ScreenUpdating = False Application.Calculation = xlCalculationManualСледующие строки должны быть добавлены в конец вашего кода (перед End Sub ):
Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomaticКак разбить код VBA на несколько строк
При написании кода в редакторе VBA иногда создаются очень длинные утверждения, так что для просмотра конца строки приходится прокручивать горизонтально. Это не влияет на выполнение кода, но затрудняет его изучение.
Чтобы разделить длинное высказывание на несколько строк, введите символ пространство после чего подчеркивание (_) в точке, в которой вы хотите разорвать линию. В VBA это называется символ окончания строки .
Чтобы правильно продолжить код на следующей строке, следуйте этим правилам:
- Не разбивайте код на части в середине имен аргументов.
- Не используйте подчеркивание для разделения комментариев. Для многострочных комментариев введите апостроф (') в начале каждой строки.
- Подчеркивание должно быть последним символом в строке, за которым не следует ничего другого.
Следующий пример кода показывает, как разбить утверждение на две строки:
Ответ = MsgBox( "Вы уверены, что хотите объединить эти ячейки?" , _ vbQuestion + vbYesNo, "Unmerge Cells" )Как сделать макрос доступным из любой рабочей книги
Когда вы пишете или записываете макрос в Excel, обычно доступ к нему возможен только из этой конкретной рабочей книги. Если вы хотите повторно использовать тот же код в других рабочих книгах, сохраните его в Personal Macro Workbook. Это сделает макрос доступным для вас каждый раз, когда вы открываете Excel.
Единственное препятствие заключается в том, что по умолчанию в Excel не существует персональной рабочей книги макросов. Чтобы создать ее, вам потребуется записать хотя бы один макрос. В следующем учебнике изложены все подробности: Персональная рабочая книга макросов в Excel
Как отменить действие макроса
После выполнения макроса его действие нельзя отменить ни нажатием Ctrl + Z, ни щелчком мыши по кнопке Отменить кнопка.
Опытные программисты VBA, конечно, могут проверить входные значения и/или начальные условия, прежде чем позволить макросу внести какие-либо изменения в рабочий лист, но в большинстве случаев это довольно сложно.
Более простой способ - сохранить активную рабочую книгу из кода макроса. Для этого просто добавьте приведенную ниже строку, прежде чем позволить макросу делать что-либо еще:
ActiveWorkbook.SaveПо желанию можно также показать окно сообщения, информирующее пользователя о том, что текущая рабочая книга была сохранена непосредственно перед выполнением основного кода макроса.
Таким образом, если вы (или ваши пользователи) не довольны результатами, вы можете просто закрыть, а затем снова открыть рабочую книгу.
Запретить Excel показывать предупреждение о безопасности при отсутствии макросов в рабочей книге
Вы когда-нибудь оказывались в ситуации, когда Excel постоянно спрашивает, хотите ли вы включить макросы, в то время как вы точно знаете, что в данной рабочей книге макросов нет?
Наиболее вероятной причиной является то, что какой-то код VBA был добавлен, а затем удален, оставив пустой модуль, который и вызывает предупреждение безопасности. Чтобы избавиться от него, просто удалите модуль, сохраните рабочую книгу, закройте и снова откройте ее. Если это не помогло, сделайте следующее:
- Для ThisWorkbook и для каждого отдельного листа откройте окно Код, нажмите Ctrl + A, чтобы выделить весь код и удалить его (даже если окно Код выглядит пустым).
- Удалите все формы пользователей и модули классов, которые содержит рабочая книга.
Вот как создавать и использовать макросы VBA в Excel. Я благодарю вас за прочтение и надеюсь увидеть вас снова в нашем блоге на следующей неделе!