Создать макрос в Excel можно, запустив средство записи макросов или с помощью редактора Visual Basic для приложений (VBA). После создания макроса следует сохранить его для возможности повторного использования в текущей или в других книгах.
Сохранение макроса в текущей книге
Если понадобится использовать макрос только в той книге, где он был создан, нажмите кнопку Сохранить или Сохранить как так же, как при обычном сохранении. Но сохранение книги с макросами происходит несколько иначе, поскольку необходимо использовать специальный формат файла «с поддержкой макросов». Поэтому при попытке сохранить макрос Excel предложит два варианта:
-
Сохранить в виде книги с поддержкой макросов (XLSM-файл), выбрав Нет.
-
Сохранить в виде книги без поддержки макросов, выбрав Да.
Чтобы сохранить макрос как книгу с поддержкой макросов,
-
щелкните Нет.
-
В окне Сохранить как в раскрывающемся списке Тип файла выберите Книга Excel с поддержкой макросов.
-
Нажмите кнопку Сохранить.
Создание и сохранение макросов в личной книге
Чтобы макросы были доступны при каждом запуске Excel, создайте их в книге «Personal.xlsb». Это скрытая книга на вашем компьютере, которая открывается при каждом запуске Excel. Для получения сведений о выполнении этих действий см. статью Создание и сохранение всех макросов в одной книге.
Нужна дополнительная помощь?
Введение
Всем нам приходится — кому реже, кому чаще — повторять одни и те же действия и операции в Excel. Любая офисная работа предполагает некую «рутинную составляющую» — одни и те же еженедельные отчеты, одни и те же действия по обработке поступивших данных, заполнение однообразных таблиц или бланков и т.д. Использование макросов и пользовательских функций позволяет автоматизировать эти операции, перекладывая монотонную однообразную работу на плечи Excel. Другим поводом для использования макросов в вашей работе может стать необходимость добавить в Microsoft Excel недостающие, но нужные вам функции. Например функцию сборки данных с разных листов на один итоговый лист, разнесения данных обратно, вывод суммы прописью и т.д.
Макрос — это запрограммированная последовательность действий (программа, процедура), записанная на языке программирования Visual Basic for Applications (VBA). Мы можем запускать макрос сколько угодно раз, заставляя Excel выполнять последовательность любых нужных нам действий, которые нам не хочется выполнять вручную.
В принципе, существует великое множество языков программирования (Pascal, Fortran, C++, C#, Java, ASP, PHP…), но для всех программ пакета Microsoft Office стандартом является именно встроенный язык VBA. Команды этого языка понимает любое офисное приложение, будь то Excel, Word, Outlook или Access.
Способ 1. Создание макросов в редакторе Visual Basic
Для ввода команд и формирования программы, т.е. создания макроса необходимо открыть специальное окно — редактор программ на VBA, встроенный в Microsoft Excel.
- В старых версиях (Excel 2003 и старше) для этого идем в меню Сервис — Макрос — Редактор Visual Basic (Toos — Macro — Visual Basic Editor).
- В новых версиях (Excel 2007 и новее) для этого нужно сначала отобразить вкладку Разработчик (Developer). Выбираем Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon) и включаем в правой части окна флажок Разработчик (Developer). Теперь на появившейся вкладке нам будут доступны основные инструменты для работы с макросами, в том числе и нужная нам кнопка Редактор Visual Basic (Visual Basic Editor)
:
К сожалению, интерфейс редактора VBA и файлы справки не переводятся компанией Microsoft на русский язык, поэтому с английскими командами в меню и окнах придется смириться:
Макросы (т.е. наборы команд на языке VBA) хранятся в программных модулях. В любой книге Excel мы можем создать любое количество программных модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна Project Explorer в левом верхнем углу редактора (если его не видно, нажмите CTRL+R). Программные модули бывают нескольких типов для разных ситуаций:
- Обычные модули — используются в большинстве случаев, когда речь идет о макросах. Для создания такого модуля выберите в меню Insert — Module. В появившееся окно нового пустого модуля можно вводить команды на VBA, набирая их с клавиатуры или копируя их из другого модуля, с этого сайта или еще откуда нибудь:
- Модуль Эта книга — также виден в левом верхнем углу редактора Visual Basic в окне, которое называется Project Explorer. В этот модуль обычно записываются макросы, которые должны выполнятся при наступлении каких-либо событий в книге (открытие или сохранение книги, печать файла и т.п.):
- Модуль листа — доступен через Project Explorer и через контекстное меню листа, т.е. правой кнопкой мыши по ярлычку листа — команда Исходный текст (View Source). Сюда записывают макросы, которые должны выполняться при наступлении определенных событий на листе (изменение данных в ячейках, пересчет листа, копирование или удаление листа и т.д.)
Обычный макрос, введенный в стандартный модуль выглядит примерно так:
Давайте разберем приведенный выше в качестве примера макрос Zamena:
- Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
- Любой макрос должен заканчиваться оператором End Sub.
- Все, что находится между Sub и End Sub — тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос выделяет ячейку заливает выделенных диапазон (Selection) желтым цветом (код = 6) и затем проходит в цикле по всем ячейкам, заменяя формулы на значения. В конце выводится окно сообщения (MsgBox).
С ходу ясно, что вот так сразу, без предварительной подготовки и опыта в программировании вообще и на VBA в частности, сложновато будет сообразить какие именно команды и как надо вводить, чтобы макрос автоматически выполнял все действия, которые, например, Вы делаете для создания еженедельного отчета для руководства компании. Поэтому мы переходим ко второму способу создания макросов, а именно…
Способ 2. Запись макросов макрорекордером
Макрорекордер — это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем создавать свой еженедельный отчет, то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим макрос создающий отчет как если бы он был написан программистом. Такой способ создания макросов не требует знаний пользователя о программировании и VBA и позволяет пользоваться макросами как неким аналогом видеозаписи: включил запись, выполнил операци, перемотал пленку и запустил выполнение тех же действий еще раз. Естественно у такого способа есть свои плюсы и минусы:
- Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу — запись останавливается.
- Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Программист же может написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например или что-то подобное).
- Если во время записи макроса макрорекордером вы ошиблись — ошибка будет записана. Однако смело можете давить на кнопку отмены последнего действия (Undo) — во время записи макроса макрорекордером она не просто возрвращает Вас в предыдущее состояние, но и стирает последнюю записанную команду на VBA.
Чтобы включить запись необходимо:
- в Excel 2003 и старше — выбрать в меню Сервис — Макрос — Начать запись (Tools — Macro — Record New Macro)
- в Excel 2007 и новее — нажать кнопку Запись макроса (Record macro) на вкладке Разработчик (Developer)
Затем необходимо настроить параметры записываемого макроса в окне Запись макроса:
- Имя макроса — подойдет любое имя на русском или английском языке. Имя должно начинаться с буквы и не содержать пробелов и знаков препинания.
- Сочетание клавиш — будет потом использоваться для быстрого запуска макроса. Если забудете сочетание или вообще его не введете, то макрос можно будет запустить через меню Сервис — Макрос — Макросы — Выполнить (Tools — Macro — Macros — Run) или с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или нажав ALT+F8.
- Сохранить в… — здесь задается место, куда будет сохранен текст макроса, т.е. набор команд на VBA из которых и состоит макрос.:
- Эта книга — макрос сохраняется в модуль текущей книги и, как следствие, будет выполнятся только пока эта книга открыта в Excel
- Новая книга — макрос сохраняется в шаблон, на основе которого создается любая новая пустая книга в Excel, т.е. макрос будет содержаться во всех новых книгах, создаваемых на данном компьютере начиная с текущего момента
- Личная книга макросов — это специальная книга Excel с именем Personal.xls, которая используется как хранилище макросов. Все макросы из Personal.xls загружаются в память при старте Excel и могут быть запущены в любой момент и в любой книге.
После включения записи и выполнения действий, которые необходимо записать, запись можно остановить командой Остановить запись (Stop Recording).
Запуск и редактирование макросов
Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы (Macros) на вкладке Разработчик (Developer) или — в старых версиях Excel — через меню Сервис — Макрос — Макросы (Tools — Macro — Macros):
- Любой выделенный в списке макрос можно запустить кнопкой Выполнить (Run).
- Кнопка Параметры (Options) позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
- Кнопка Изменить (Edit) открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.
Создание кнопки для запуска макросов
Чтобы не запоминать сочетание клавиш для запуска макроса, лучше создать кнопку и назначить ей нужный макрос. Кнопка может быть нескольких типов:
Кнопка на панели инструментов в Excel 2003 и старше
Откройте меню Сервис — Настройка (Tools — Customize) и перейдите на вкладку Команды (Commands). В категории Макросы легко найти веселый желтый «колобок» — Настраиваемую кнопку (Custom button):
Перетащите ее к себе на панель инструментов и затем щелкните по ней правой кнопкой мыши. В контекстом меню можно назначить кнопке макрос, выбрать другой значок и имя:
Кнопка на панели быстрого доступа в Excel 2007 и новее
Щелкните правой кнопкой мыши по панели быстрого доступа в левом верхнем углу окна Excel и выберите команду Настройка панели быстрого доступа (Customise Quick Access Toolbar):
Затем в открывшемся окне выберите категорию Макросы и при помощи кнопки Добавить (Add) перенесите выбранный макрос в правую половину окна, т.е. на панель быстрого доступа:
Кнопка на листе
Этот способ подходит для любой версии Excel. Мы добавим кнопку запуска макроса прямо на рабочий лист, как графический объект. Для этого:
- В Excel 2003 и старше — откройте панель инструментов Формы через меню Вид — Панели инструментов — Формы (View — Toolbars — Forms)
- В Excel 2007 и новее — откройте выпадающий список Вставить (Insert) на вкладке Разработчик (Developer)
Выберите объект Кнопка (Button):
Затем нарисуйте кнопку на листе, удерживая левую кнопку мыши. Автоматически появится окно, где нужно выбрать макрос, который должен запускаться при щелчке по нарисованной кнопке.
Создание пользовательских функций на VBA
Создание пользовательских функций или, как их иногда еще называют, UDF-функций (User Defined Functions) принципиально не отличается от создания макроса в обычном программном модуле. Разница только в том, что макрос выполняет последовательность действий с объектами книги (ячейками, формулами и значениями, листами, диаграммами и т.д.), а пользовательская функция — только с теми значениями, которые мы передадим ей как аргументы (исходные данные для расчета).
Чтобы создать пользовательскую функцию для расчета, например, налога на добавленную стоимость (НДС) откроем редактор VBA, добавим новый модуль через меню Insert — Module и введем туда текст нашей функции:
Обратите внимание, что в отличие от макросов функции имеют заголовок Function вместо Sub и непустой список аргументов (в нашем случае это Summa). После ввода кода наша функция становится доступна в обычном окне Мастера функций (Вставка — Функция) в категории Определенные пользователем (User Defined):
После выбора функции выделяем ячейки с аргументами (с суммой, для которой надо посчитать НДС) как в случае с обычной функцией:
Содержание
- Создание Личной книги макросов
- Как создать Личную Книгу Макросов
- Сохранение макросов в личной книге макросов
- Что нельзя сделать с помощью макрорекодера?
- Абсолютная и относительная запись макроса
- Безопасность макросов в современных версиях Excel (2007 и более новых)
- Исходные данные
- Как использовать Личную Книгу Макросов
- Сохранение файла Excel с названием из ячейки — без привязки к ячейке
- Как сохранить макрос в личную книгу макросов
- Предназначение Личной книги макросов
- Скрытие / отображение персональной макрокоманды
- Запись макроса в Excel
Создание Личной книги макросов
Изначально Личная книга макросов в программе Excel отсутствует. Чтобы проверить, есть ли она в вашей программе (не создал ли ее кто-то ранее), откройте любую рабочую книгу и перейдите в редактор VBA, нажав сочетание клавиш «Alt+F11» (в этом сочетании используется левая клавиша Alt). Открыть редактор VBA можно и пройдя по пунктам меню:
Excel 2007-2016: «Разработчик» — «Visual Basic» (смотрите, как отобразить вкладку «Разработчик», которая изначально скрыта);
Excel 2000-2003: «Сервис» — «Макрос» — «Редактор Visual Basic».
Откроется редактор VBA:
Проводник в редакторе VBA
Если в проводнике сверху вы видите строку «VBAProject (PERSONAL.XLSB)», значит Личная книга макросов на вашем компьютере уже есть.
Если же ее нет, необходимо записать какой-нибудь простенький макрос, выбрав при его создании Сохранить в: Личная книга макросов.
После записи макроса, сохраненного в Личную книгу макросов, эта книга будет создана и появится в проводнике редактора VBA.
Как создать Личную Книгу Макросов
На самом деле, Личная Книга Макросов (ЛКМ) – это обычный файл Excel в формате двоичной книги (Personal.xlsb), который автоматически в скрытом режиме открывается одновременно с Microsoft Excel. Т.е. когда вы просто запускаете Excel или открываете любой файл с диска, на самом деле открываются два файла – ваш и Personal.xlsb, но второго мы не видим. Таким образом все макросы, которые хранятся в ЛКМ оказываются доступы для запуска в любой момент, пока открыт Excel.
Если вы еще ни разу не пользовались ЛКМ, то изначально файл Personal.xlsb не существует. Самый легкий способ его создать – это записать рекордером какой-нибудь ненужный бессмысленный макрос, но указать в качестве места для его хранения Личную Книгу – тогда Excel будет вынужден автоматически ее для вас создать. Для этого:
- Откройте вкладку Разработчик (Developer). Если вкладки Разработчик не видно, то ее можно включить в настройках через Файл – Параметры – Настройка ленты (Home – Options – Customize the Ribbon).
- На вкладке Разработчик нажмите кнопку Запись макроса (Record Macro). В открывшемся окне выберите Личную книгу макросов (Personal Macro Workbook) как место для хранения записанного кода и нажмите OK:
- Остановите запись кнопкой Остановить запись (Stop Recording) на вкладке Разработчик (Developer)
Проверить результат можно, нажав на кнопку Visual Basic там же на вкладке Разработчик – в открывшемся окне редактора в левом верхнем углу на панели Project – VBA Project должен появиться наш файл PERSONAL.XLSB. Его ветку которого можно развернуть плюсиком слева, добравшись до Module1, где и хранится код только что записанного нами бессмысленного макроса:
Поздравляю, вы только что создали себе Личную Книгу Макросов! Только не забудьте нажать на кнопку сохранения с дискеткой в левом верхнем углу на панели инструментов.
Сохранение макросов в личной книге макросов
Вы можете сохранить макросы в своей Персональной рабочей тетради, выбрав ее в качестве опции сохранения при записи макросов.
Выберите «Персональная книга макросов» в раскрывающемся списке под категорией « Хранить макрос» .
- Запишите свой второй макрос.
- Укажите детали макроса в диалоговом окне «Запись макроса», как показано ниже.
- Нажмите ОК.
Ваша запись начинается. Создайте таблицу, как показано ниже.
-
Прекратить запись.
-
Нажмите вкладку VIEW на ленте.
-
Нажмите Макросы.
-
Выберите View Macros из выпадающего списка. Откроется диалоговое окно «Макрос».
Прекратить запись.
Нажмите вкладку VIEW на ленте.
Нажмите Макросы.
Выберите View Macros из выпадающего списка. Откроется диалоговое окно «Макрос».
Имя макроса отображается с префиксом PERSONAL.XLSB! указывает на то, что макрос находится в личной книге макросов.
Сохраните свою рабочую книгу. Он будет сохранен как файл .xls, так как макрос отсутствует в вашей книге и закроет Excel.
Вы получите следующее сообщение о сохранении изменений в Персональной книге макросов:
Нажмите кнопку Сохранить. Ваш макрос сохраняется в файле Personal.xlsb на вашем компьютере.
Что нельзя сделать с помощью макрорекодера?
Макро-рекордер отлично подходит для вас в Excel и записывает ваши точные шаги, но может вам не подойти, когда вам нужно сделать что-то большее.
- Вы не можете выполнить код без выбора объекта. Например, если вы хотите, чтобы макрос перешел на следующий рабочий лист и выделил все заполненные ячейки в столбце A, не выходя из текущей рабочей таблицы, макрорекодер не сможет этого сделать. В таких случаях вам нужно вручную редактировать код.
- Вы не можете создать пользовательскую функцию с помощью макрорекордера. С помощью VBA вы можете создавать пользовательские функции, которые можно использовать на рабочем листе в качестве обычных функций.
- Вы не можете создавать циклы с помощью макрорекордера. Но можете записать одно действие, а цикл добавить вручную в редакторе кода.
- Вы не можете анализировать условия: вы можете проверить условия в коде с помощью макрорекордера. Если вы пишете код VBA вручную, вы можете использовать операторы IF Then Else для анализа условия и запуска кода, если true (или другой код, если false).
Абсолютная и относительная запись макроса
Вы уже знаете про абсолютные и относительные ссылки в Excel? Если вы используете абсолютную ссылку для записи макроса, код VBA всегда будет ссылаться на те же ячейки, которые вы использовали. Например, если вы выберете ячейку A2 и введете текст “Excel”, то каждый раз – независимо от того, где вы находитесь на листе и независимо от того, какая ячейка выбрана, ваш код будет вводить текст “Excel” в ячейку A2.
Если вы используете параметр относительной ссылки для записи макроса, VBA не будет привязываться к конкретному адресу ячейки. В этом случае программа будет “двигаться” относительно активной ячейки. Например, предположим, что вы уже выбрали ячейку A1, и вы начинаете запись макроса в режиме относительной ссылки. Теперь вы выбираете ячейку A2, вводите текст Excel и нажмите клавишу Enter. Теперь, если вы запустите этот макрос, он не вернется в ячейку A2, вместо этого он будет перемещаться относительно активной ячейки. Например, если выбрана ячейка B3, она переместится на B4, запишет текст “Excel” и затем перейдет к ячейке K5.
Теперь давайте запишем макрос в режиме относительных ссылок:
- Выберите ячейку A1.
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Относительные ссылки”. Он будет подсвечиваться, указывая, что он включен.
- Нажмите кнопку “Запись макроса”.
- В диалоговом окне “Запись макроса” введите имя для своего макроса. Например, имя “ОтносительныеСсылки”.
- В опции “Сохранить в” выберите “Эта книга”.
- Нажмите “ОК”.
- Выберите ячейку A2.
- Введите текст “Excel” (или другой как вам нравится).
- Нажмите клавишу Enter. Курсор переместиться в ячейку A3.
- Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.
Макрос в режиме относительных ссылок будет сохранен.
Теперь сделайте следующее.
- Выберите любую ячейку (кроме A1).
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Макросы”.
- В диалоговом окне “Макрос” кликните на сохраненный макрос “ОтносительныеСсылки”.
- Нажмите кнопку “Выполнить”.
Как вы заметите, макрос записал текст “Excel” не в ячейки A2. Это произошло, потому что вы записали макрос в режиме относительной ссылки. Таким образом, курсор перемещается относительно активной ячейки. Например, если вы сделаете это, когда выбрана ячейка B3, она войдет в текст Excel – ячейка B4 и в конечном итоге выберет ячейку B5.
Вот код, который записал макрорекодер:
Sub ОтносительныеСсылки() ' ' ОтносительныеСсылки Макрос ' ' ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "Excel" ActiveCell.Offset(1, 0).Range("A1").Select End Sub
Обратите внимание, что в коде нет ссылок на ячейки B3 или B4. Макрос использует Activecell для ссылки на текущую ячейку и смещение относительно этой ячейки.
Не обращайте внимание на часть кода Range(«A1»). Это один из тех случаев, когда макрорекодер добавляет ненужный код, который не имеет никакой цели и может быть удален. Без него код будет работать отлично.
Безопасность макросов в современных версиях Excel (2007 и более новых)
Чтобы запустить макрос в современных версиях Excel, файл должен быть сохранён как Книга Excel с поддержкой макросов. Открывая такой файл, по его расширению xlsm Excel понимает, что в данной рабочей книге содержатся макросы (в отличие от файла со стандартным расширением xlsx).
Поэтому, чтобы иметь возможность запускать созданный в обычной рабочей книге Excel макрос всегда и везде, нужно сохранить её с расширением xlsm. Для этого на вкладке Файл (File) нажмите Сохранить как (Save as) и в поле Тип файла (Save as type) выберите Книга Excel с поддержкой макросов (Excel Macro-Enabled Workbook).
Отличие в типе файлов ясно указывает на то, что рабочая книга содержит макросы, и это уже становится первым важным шагом к соблюдению мер безопасности. Помимо этого, в Excel существует несколько режимов безопасности макросов, выбрать один их которых можно в меню параметров приложения. Вот эти режимы:
- Отключить все макросы без уведомления (Disable all macros without notification)
Запрет на выполнение любых макросов. При открытии книги Excel не уведомляет о том, что эта книга содержит макросы, поэтому пользователь может не понять причину, по которой книга Excel не работает так, как должна.
- Отключить все макросы с уведомлением (Disable all macros with notification)
Запрет на выполнение макросов. Однако, если в рабочей книге есть макрос, появится предупреждение о том, что макрос присутствует, но отключен.
- Отключить все макросы без цифровых подписей (Disable all macros except digitally signed macros)
Разрешено выполнение макросов только из доверенных источников. Все прочие макросы выполняться не будут. При открытии книги Excel не уведомляет о том, что эта книга содержит макросы, поэтому пользователь может не понять причину, по которой книга Excel не работает так, как должна.
- Включить все макросы (Enable all macros)
Разрешено выполнение всех макросов. При открытии книги Excel не появляется уведомление о том, что в ней содержатся макросы. Соответственно пользователь может не знать, что какой-либо макрос выполняется, пока открыт файл.
Вариант Отключить все макросы с уведомлением — позволяет при открытии файла сделать выбор: разрешить запуск макросов или отключить их. При этом вверху листа появляется жёлтая полоса с уведомлением и кнопкой, как показано на рисунке ниже:
Чтобы разрешить выполнение макросов нужно просто кликнуть по кнопке Включить содержимое (Enable Content).
Исходные данные
Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.
Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.
Как использовать Личную Книгу Макросов
Дальше все просто. Любой нужный вам макрос (т.е. кусок кода, начинающийся на Sub и заканчивающийся End Sub) можно смело копировать и вставлять либо в Module1, либо в отдельный модуль, добавив его предварительно через меню Insert – Module. Хранить все макросы в одном модуле или раскладывать по разным – исключительно вопрос вкуса. Выглядеть это должно примерно так:
Запустить добавленный макрос можно в диалоговом окне, вызываемом с помощью кнопки Макросы (Macros) на вкладке Разработчик:
В этом же окне, нажав кнопку Параметры (Options), можно задать сочетание клавиш для быстрого запуска макроса с клавиатуры. Будьте внимательны: сочетания клавиш для макросов различают раскладку (русская или английская) и регистр.
Кроме обычных макросов-процедур в Личной Книге можно хранить и пользовательские макро-функции (UDF = User Defined Function). В отличие от процедур, код функций начинаются с оператора Function или Public Function, а заканчиваются на End Function:
Код необходимо аналогичным образом скопировать в любой модуль книги PERSONAL.XLSB и затем можно будет вызвать функцию обычным образом, как любую стандарную функцию Excel, нажав кнопку fx в строке формул и выбрав функцию в окне Мастера Функций в категории Определенные пользователем (User Defined):
Примеры таких функций можно в больших количествах найти в интернете или здесь же на сайте (сумма прописью, приблизительный текстовый поиск, ВПР 2.0, конвертация кириллицы в транслит и т.п.)
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
Замените код процедуры следующим кодом, который совсем немного, но изменен.
Sub SaveFile() 'Объявление переменных Dim CellValue As String Dim Path As String Dim FinalFileName As String 'Временно отключаем показ вспомогательных сообщений Application.DisplayAlerts = False 'Задаём каталог сохранения файла (в данном случае текущий каталог) Path = ThisWorkbook.Path & "" 'Проверка значения ячейки If ActiveCell.Value = "" Then MsgBox "В ячейке отсутствует значение", vbCritical, "Ошибка!" Exit Sub End If 'Получаем значение активной ячейки CellValue = ActiveCell.Value 'Формируем итоговый путь и название файла FinalFileName = Path & CellValue 'Сохраняем файл ActiveWorkbook.SaveAs FileName:=FinalFileName, _ FileFormat:=xlOpenXMLWorkbook 'FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Для сохранения файла с макросом 'Включаем вывод сообщений Application.DisplayAlerts = True MsgBox "Файл успешно сохранен с названием - " & CellValue, vbInformation, "Результат" End Sub
Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).
Как видим, все отработало.
Как сохранить макрос в личную книгу макросов
Чтобы создать и схоронить код в личной книге макросов:
- Выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Запись макроса».
- В появившемся диалоговом окне «Запись макроса», из выпадающего списка «Сохранить в:» выберите опцию «Личная книга макросов». И нажмите на кнопку OK.
- Теперь выберите инструмент: «РАЗРАБОТЧИК»-«Код»-«Остановить запись».
- Откройте редактор Visual Basic: «РАЗРАБОТЧИК»-«Код»-«Visual Basic». Или нажмите комбинацию горячих клавиш ALT+F11. В окне «Project-VBAProject», в дереве проектов появиться доступная еще одна книга Personal.xlsb. Кликните на «плюсик» слева на против этой книги, чтобы раскрыть проект книги Personal.xlsb. А после двойным щелчком отройте ее Module1.
- В результате откроется окно кода модуля с зарегистрированным макросом. Удалите его код и введите код своего макроса. Выберите инструмент в редакторе макросов: «File»-«Save Personal.xlsb», а потом закройте редактор Visual Basic.
Теперь у вас подключена скрытая книга для хранения макросов, к которым можно получить доступ из любой другой рабочей книги. Личная книга макросов где находится находиться в папке автозагрузки файлов Excel – XLSTART: C:Documents and SettingsUser_NameAppDataRoamingMicrosoftExcelXLSTARTPersonal.xlsb
Примечание. XLSTART – это папка для автозагрузки файлов вместе с запуском программы Excel. Если сохранить файл в данную папку, то он будет открываться вместе с программой Excel. Для версий старше 2007 путь к папке автозагрузки будет следующим: C:Program FilesMicrosoft OfficeOffice12Xlstart.
Если вам нужно записать в нее новый макрос просто откройте редактор, а потом откройте модуль книги Personal.xlsb. Уже записанные в нее макросы удалять не нужно. Они не будут между собой конфликтовать если соблюдать одно простое правило – в одном модуле нельзя хранить макросы с одинаковыми именами.
Предназначение Личной книги макросов
Предназначением Личной книги макросов является хранение пользовательского программного кода (макросов) в виде подпрограмм и функций для использования их в других рабочих книгах Excel. Главное преимущество этой книги заключается в том, что подпрограммы и функции, сохраненные в Личной книге макросов, всегда доступны для вызова их из других книг, так как она загружается автоматически при загрузке Excel и закрывается вместе с приложением.
Так же, как и в других рабочих книгах, в Личной книге макросов можно добавлять программные модули, импортировать и экспортировать их, создавать в модулях пользовательские процедуры (подпрограммы и функции) или вставлять их из модулей других книг.
Подпрограммы, размещенные в Личной книге макросов, можно просмотреть в окне «Список макросов», открыв его из любой книги Excel (функции в этом окне не представлены). Они будут перечислены с приставкой «PERSONAL.XLSB!».
Пользовательские функции, размещенные в Личной книге макросов, доступны для записи их в ячейки рабочего листа с помощью Мастера функций:
Список пользовательских функций в Личной книге макросов
Пользовательские функции по умолчанию расположены в категории «Определенные пользователем». Они выбираются и вставляются в ячейки рабочего листа с помощью Мастера функций так же, как и все остальные.
Пользовательские функции, расположенные в обычной рабочей книге Excel, тоже будут доступны в Мастере функций, но для этого книга должна быть открыта.
Вызов из кода процедуры текущей рабочей книги Excel подпрограммы или функции из Личной книги макросов осуществляется так же, как и запуск процедуры из любой другой рабочей книги.
Скрытие / отображение персональной макрокоманды
Персональная макрокоманда по умолчанию будет скрыта. Когда вы запускаете Excel, загружается личная книга макросов, но вы ее не видите, потому что она скрыта. Вы можете показать это следующим образом –
-
Нажмите вкладку VIEW на ленте.
-
Нажмите Показать в группе окон.
Нажмите вкладку VIEW на ленте.
Нажмите Показать в группе окон.
Откроется диалоговое окно «Показать».
PERSONAL.XLSB появится в поле «Показать книгу» и нажмите «ОК».
Теперь вы можете просматривать макросы, сохраненные в личной книге макросов.
Чтобы скрыть личную книгу макросов, выполните следующие действия:
- Нажмите на личную книгу макросов.
- Нажмите вкладку VIEW на ленте.
- Нажмите Скрыть на ленте.
Запись макроса в Excel
Теперь давайте запишем очень простой макрос, который выбирает ячейку и вводит в нее текст, например “Excel”.
Вот шаги для записи такого макроса:
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Запись макроса”. Откроется одноименное диалоговое окно.
- В диалоговом окне “Запись макроса” введите имя для своего макроса, например “ВводТекста”. Есть несколько условий именования, которые необходимо соблюдать при назначении макроса. Например, вы не можете использовать пробелы между ними. Обычно я предпочитаю сохранять имена макросов как одно слово, с разными частями с заглавным первым алфавитом. Вы также можете использовать подчеркивание для разделения двух слов – например, “Ввод_текста”.
- Если вы хотите, то можете задать сочетание клавиш. В этом случае мы будем использовать ярлык Ctrl + Shift + N. Помните, что сочетание, которое вы указываете, будет отменять любые существующие горячие клавиши в вашей книге. Например, если вы назначили сочетание Ctrl + S, вы не сможете использовать это для сохранения рабочей книги (вместо этого, каждый раз, когда вы его используете, он выполняет макрос).
- В поле “Сохранить в” убедитесь, что выбрана опция “Эта книга”. Этот шаг гарантирует, что макрос является частью рабочей книги. Он будет там, когда вы сохраните его и снова откроете, или даже если вы поделитесь файлом с кем-то.
- Введите описание при необходимости. Обычно я этого не делаю, но если у вас много макросов, лучше указать, чтобы в будущем не забыть что делает макрос.
- Нажмите “ОК”. Как только вы нажмете OK, Excel начнет записывать ваши действия. Вы можете увидеть кнопку “Остановить запись” на вкладке “Разработчик”, которая указывает, что выполняется запить макроса.
- Выберите ячейку A2.
- Введите текст “Excel” (или вы можете использовать свое имя).
- Нажмите клавишу Enter. Вы попадете на ячейку A3.
- Нажмите кнопку “Остановить запись” на вкладке “Разработчик”.
Поздравляем! Вы только что записали свой первый макрос в Excel. Хотя макрос не делает ничего полезного, но он поможет нам понять как работает макрорекордер в Excel.
Теперь давайте рассмотрим код который записал макрорекодер. Выполните следующие действия, чтобы открыть редактор кода:
- Удалите текст в ячейке A2. Это нужно, чтобы проверить будет ли макрос вставлять текст в ячейку A2 или нет.
- Выберите любую ячейку – кроме A2. Это нужно проверить, выбирает ли макрос ячейку A2 или нет.
- Перейдите на вкладку “Разработчик”.
- В группе “Код” нажмите кнопку “Макросы”.
- В диалоговом окне “Макрос” щелкните макрос “ВводТекста”.
- Нажмите кнопку “Выполнить”.
Вы увидите, что как только вы нажмете кнопку “Выполнить”, текст “Excel” будет вставлен в ячейку A2 и выбрана ячейка A3. Это происходит за миллисекунды. Но на самом деле макрос последовательно выполнил записанные действия.
Примечание. Вы также можете запустить макрос с помощью сочетания клавиш Ctrl + Shift + N (удерживайте клавиши Ctrl и Shift, а затем нажмите клавишу N). Это тот же самый ярлык, который мы назначили макросу при его записи.
Источники
- https://vremya-ne-zhdet.ru/vba-excel/lichnaya-kniga-makrosov/
- https://www.planetaexcel.ru/techniques/3/5201/
- https://coderlessons.com/tutorials/bolshie-dannye-i-analitika/izuchite-excel-makrosy/makrosy-excel-makrosy-v-odnoi-knige
- https://micro-solution.ru/excel/vba/first-macros
- http://officeassist.ru/excel/kak-soxranit-makrosy-excel/
- https://info-comp.ru/obucheniest/703-excel-save-as-file-on-vba.html
- https://exceltable.com/vba-macros/lichnaya-kniga-makrosov
Сохранение макроса
Смотрите также листе Excel или своими инструментами для ответа и заранее почитал в интернете, sFolder As String,: RAN,// These are_Igor_61 бы вопроса:[QUOTE]PATRI0T написал:На листе обработчикРазработчикРазработчикВы можете назначить макрос желательно ввести понятное Visual Basic для уделить пару секундПримечание: список данных будет автоматизации работы в багодарен за какую-либо что если выбрать
sFiles As StringСкопировал в личную the main file: RAN, не, не А зачем это? на событие Workbook_Openщелкнитенажмите кнопку значку и добавить описание, которое будет приложений (VBA). Например,
Сохранение макроса в текущей книге
и сообщить, помоглаМы стараемся как становиться больше. Относительные Excel и создания помощь! «личная книга макросов», ‘диалог запроса выбора книгу макросов. formats in Excel съедят, еще больше Kill Addr &Что делаю:МакросыЗапись макроса его на панель полезно вам и вы можете записать ли она вам, можно оперативнее обеспечивать
-
средства не привязывают макросов.Юрий М то он сохранится папки с файлами
-
Создал пустой файл 2007-2010: «ВАУ»! «Файл без макросов1.Копирую текущий лист
, чтобы просмотреть макросы,. быстрого доступа или
-
всем, кто запускает макрос, который сначала с помощью кнопок
-
вас актуальными справочными курсор к конкретномуМакросы – это внутренние: Здравствуйте! Уточните: один в некой папке With Application.FileDialog(msoFileDialogFolderPicker) If Книга1.xlsm с 6// 51 =
-
Надеюсь, я тоже 2007.xlsx[/CODE] в новую книгу,
Создание и сохранение макросов в личной книге
связанные с книгой.В поле ленту. макрос. Если у обновляет таблицу в внизу страницы. Для материалами на вашем адресу ячейки. приложения, которые берут и тот же xlstart. Так вот .Show = False листами. xlOpenXMLWorkbook (without macro’s
support.office.com
Автоматизация задач с помощью средства записи макросов — Excel
когда-то такие задачкиВ модуле к удаляю все лишнее При этом откроетсяИмя макросаНазначение макроса для элемента вас много макросов, Excel, а затем удобства также приводим языке. Эта страницаПо умолчанию в Excel на себя всю файл (B.xls) нужно нет нигде у Then Exit SubОткрыл его и in 2007-2010, xlsx) буду сходу решать, этой и еще на листе (управляющие диалоговое окно
введите название макроса. управления на листе описания помогут быстро открывает Outlook для ссылку на оригинал переведена автоматически, поэтому включен режим «Абсолют», рутинную работу, облегчая сохранить 100 раз меня такой папки. sFolder = .SelectedItems(1) запустил ваш макрос.// 52 = но пока - к нескольким строкам
кнопки (shape), лишние
Макрос Сделайте имя понятным,Вы можете назначать макросы определить, для чего ее отправки по (на английском языке). ее текст может но вы можете жизнь пользователю. Каждый с новыми именами?Далее: допустим, я End With WithОшибка. Выделена строка. xlOpenXMLWorkbookMacroEnabled (with or изучаю VBA в есть комментарии. строки .итд). чтобы можно было формам и элементам они нужны. электронной почте.Для автоматизации повторяющихся задач, содержать неточности и изменить его, включив пользователь может создатьvfr800 нашел эту папку. UserForm1 .Show 0ActiveWorkbook.SaveAs sfName1, 51 without macro’s in
основном на уровнеТак же обратите2. Удаляю макросыПримечание: быстро найти нужный ActiveX на листе.Чтобы начать запись макроса,Чтобы записать макрос, следуйте вы можете записать грамматические ошибки. Для кнопку «Относительные ссылки» макрос без знания: Нет, файл B.xls Чтобы дать доступ .Label1.Caption = «Работаем…»И табличка. 2007-2010, xlsm) макрорекордера, т.к. не внимание на названия
(внизу код) Макросы нельзя отменить. Прежде макрос.Включение и отключение макросов нажмите кнопку инструкциям ниже. макрос с средство нас важно, чтобы расположенную ниже под
Запись макроса
языков программирования. Для каждый раз изменяется(над
-
к макросу другим .Repaint For iЧто нужно изменить// 50 = хватает времени учебники файлов в коде.3. сохраняю как чем впервые запускатьПримечание:
-
в файлах OfficeОКНа вкладке записи макросов в эта статья была
-
кнопкой «Запись макроса» этого существует макрорекодер, этим как раз пользователям, то нужно = 1 To что бы макрос xlExcel12 (Excel Binary читать. И в Мои названия поменяйте файл .xls (xlExcel8) записанный макрос, сохраните Первым символом имени макросаУзнайте, как включать и.Разработчик Microsoft Excel. Представьте
вам полезна. Просим на панели инструментов
-
который запускается с и работает макрос загрузить его им 100000000 Next sFolder заработал из личной Workbook in 2007-2010 Вашем коде многое
на Ваши
Sheets(«Новый Заказ»).Copy Call книгу или создайте должна быть буква. отключать макросы вВыполните действия, которые нужнов группе имеют даты в вас уделить пару вкладки «Разработчик»:
-
помощью кнопки «Запись из файла A.xls)…точнее в ту же = sFolder & книги макросов. Из with or without для меня -
_Igor_61 Delete_Macroses ActiveWorkbook.SaveAs FileName:=ПутьСохранения ее копию, чтобы Последующие символы могут файлах Office. записать.Код форматах случайных и секунд и сообщить,Абсолютный отсчет ячеек, всегда макроса». содержимое меняется…а путь папку у них? IIf(Right(sFolder, 1) = листа текущей книги macro’s, xlsb) темный лес. Например,
-
: Александр, здравствуйте! Но & «» & предотвратить внесение нежелательных быть буквами, цифрамиОткрытие редактора Visual BasicНа вкладкенажмите кнопку вы хотите применить помогла ли она ведется с исходногоВ этом режиме все расположения и названиеСпасибо. Application.PathSeparator, «», Application.PathSeparator) отрабатывает корректно. Прикрепленные// 56 = я не знаю, тогда пользователю нужно Fname, FileFormat:=xlExcel8, Password:=»», изменений. Если вас или знаками подчеркивания.Нажмите клавишиРазработчикЗапись макроса ко всем адресам
-
вам, с помощью положения (адрес ячейки действия пользователя макрорекодер файла B.xls остаютсяP.S. сейчас сижу
‘отключаем обновление экрана, файлы 2017-10-07_193636.png (3.59 xlExcel8 (97-2003 format какую роль выполняет лезть в параметры, WriteResPassword:=»», ReadOnlyRecommended:=False, CreateBackup:=False не устраивают результаты В имени макросаALT+F11в группе. единый формат. Макрос кнопок внизу страницы. А1) – до в Excel записывает, прежними.
-
за компьютером, где чтобы наши действия КБ) in Excel 2007-2010, $ в названиях
ставить доверенный доступЭтой процедурой удаляю выполнения макроса, вы не должно содержаться.Код-ИЛИ- сделать это за Для удобства также адреса курсора с переводя на языкЮрий М
-
Excel 2013. не мелькали Application.ScreenUpdatingЮрий М xls)
-
переменных sfName, также и перезапускать приложение,
-
макросы (пытаюсь) можете закрыть книгу, пробелов; в качествеПоиск справки по использованиюнажмите кнопкуНажмите вас. Запись макроса,
приводим ссылку на
вашими данными. Если программирования VBA-код в: Вы говорите «Нет»,Manyasha = False sFiles: Игорь, всё верно.// 57 = PDF не понимаю, как что для пользователя,
Работа с макросами, записанными в Excel
Sub Delete_Macroses() Dim не сохраняя ее. разделителей слов следует редактора Visual BasicОстановить записьALT применив нужный формат оригинал (на английском вы сохранили ваш автоматическом режиме. После а из ответа: = Dir(sFolder &
_Igor_61// 60 = и почему одной думаю не очень oVBComponent As Object,Ниже приведены дополнительные сведения использовать знаки подчеркивания.Узнайте, как найти справку.+ и затем воспроизводить языке) .
макрос в книге завершения записи мы следует «Да» :-)
iilfat
«*№*.xlsm») Do While
: Юрий М, спасибо! xlOpenDocumentSpreadsheet OpenDocument Spreadsheet |
и той же удобно. Поэтому по-моему lCountLines As Long |
о работе с |
Если используется имя по элементам Visual-ИЛИ-T макроса при необходимости.Создать макрос в Excel личных макросов (рекомендуется |
получаем готовую программу, |
Каждый раз после, а сохранить в sFiles <> «»RAN |
_Igor_61 переменной (стр.4 и |
проще это все ‘Проверяем, защищен проект макросами в Excel. макроса, являющееся ссылкой Basic.Нажмите+Windows MacOS |
можно, запустив средство так и делать), |
|
M |
При записи макроса все записи макросов или то вы можете те действия, которые сохраняется с новым |
не устроило? sFolder & sFiles |
ActiveWorkbook я люблю этот разные значения (или |
файлов, а потом Each oVBComponent In |
Описание появиться сообщение об Basic (VBE) вы |
+ |
+ необходимые действия записываются с помощью редактора |
использовать свою программу выполнял пользователь при |
именем. Покажите ВашиМакрос будет доступен ‘действия с файлом |
Работа с записанным кодом в редакторе Visual Basic (VBE)
.FullName форум! Каждый раз это функции - лишний файл удалить. ActiveWorkbook.VBProject.VBComponents On ErrorВключение и отключение макросов ошибке, указывающее на можете добавлять вTR в виде кода Visual Basic для на других листах записи. файлы. Предварительно ознакомьтесь всем пользователям, у Sheets(«Приложение № 7…………………………………….. какое-то «ВАУ» для
не знаю), ну ИМХО, конечно Resume Next WithУзнайте, как включать и недопустимое имя макроса..
Запись макроса
записанный код собственные+
-
. Visual Basic для приложений (VBA). После с аналогичными данными.Как записать готовый макрос с Правилами. кого есть Ваш «).Select ActiveSheet.Unprotect ‘снимаемActiveWorkbook
-
себя нахожу! Юрий и т.д. -Александр П. oVBComponent Select Case отключать макросы в
-
В списке переменные, управляющие структурыMВ поле приложений (VBA). Такими создания макроса следует Независимо от того, в Excel? Оченьvfr800 файл. блокировку с листа. Sheets(Array(1, 3)).Copy М, спасибо большое! короче, мне в: _Igor_61, ну так, .Type Case 1
Excel для Mac.Сохранить в и другие элементы,+Имя макроса действиями может быть
-
сохранить его для где ваш курсор просто:: Простите мою необознанность…как-никакА Вы запишите Cells.Select ‘выделяем весь……………………………
-
Сохранил Ваши пояснения, этом коде понятны наше дело предложить ‘Модули .Collection.Remove oVBComponentСоздание, выполнение, изменение иливыберите книгу, в которые не поддерживаетRвведите название макроса. ввод текста или
возможности повторного использования позиционируется, когда вы
-
На вкладке «Разработчик» нажимаем новичек я во сначала какой-нибудь макрос лист Selection.Copy ‘КопируемRAN
-
они очень пригодятся только строки после вариант Case 2 ‘Модули удаление макроса которой вы хотите средство записи макросов.
. Сделайте имя понятным, чисел, выбор ячеек в текущей или начинаете запись макроса! кнопку «Запись макроса». всем этом. Вообщем с сохранением в Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,: _Igor_61, в дальнейшем. Не «Next», и то. Класса .Collection.Remove oVBComponentЧтобы сэкономить время на сохранить макрос. Так как средство
-
На вкладке чтобы можно было или команд на в других книгах. Даже если он
В появившимся диалоговом окне суть такова: открываем личную книгу, а SkipBlanks _ :=False,F1, Search results знал, что части не все, например,У ТСа так Case 3 ‘Формы выполнении часто повторяющихсяКак правило, макросы сохраняются записи макросов фиксируетРазработчик быстро найти нужный ленте или вЕсли понадобится использовать макрос уже находится в заполняем параметры макроса. во вложении файл потом ищите ее Transpose:=False ‘ вставляем for enumeration кода можно цифрами не знаю что же, может быть
-
.Collection.Remove oVBComponent Case задач, можно записать в почти каждый шаг,щелкните макрос. меню, форматирование ячеек, только в той ячейке A1, ваш И нажимаем «ОК». «Прога.xls»…в ней макрос (Personal.xlsb): в лист значенияНиколай задавать (хотя, нет, значат «51» и
-
только 2003 версия 100 ‘ЭтаКнига, Листы соответствующую последовательность действийтой же книге выполняемый во время
МакросыПримечание: строк или столбцов книге, где он первый макрос лучшеПосле завершения нажимаем на на кнопке «НажмиC:UsersМаринаAppDataRoamingMicrosoftExcelXLSTART за место формул: Кнопка цитирования не пример уже знаю «56», ну и офиса, без конвертера. lCountLines = .CodeModule.CountOfLines в виде макроса.
-
, но если вам записи, может также, чтобы просмотреть макросы, Первым символом имени макроса
-
и даже импорт был создан, нажмите
-
записывать после нажатия кнопку «Остановить запись», тут»…после выполнения макроса(у меня win8, Range(«A1»).Select Sheets(«Приложение №
Работа с макросами, записанными в Excel
для ответа [МОДЕРАТОР] — в MsgBox т.д. не буду Тогда в .xlsx .CodeModule.DeleteLines 1, lCountLines Узнайте, как создавать нужно, чтобы данный потребоваться удалить ненужный связанные с книгой. должна быть буква.
данных из внешнего кнопку клавиш должны быть после чего макрос открывается файл «Зразок.xls» на 7-ке также 3 «).Select ActiveSheet.UnprotectsfName1 = ActiveWorkbook.FullName 64, 32, 48), все перечислять, т.к. он не сможет End Select End
и выполнять макросы. макрос был всегда код. Просмотр записанного
Кроме того, можно
Последующие символы могут
источника, такого как |
Сохранить Ctrl + Home. будет автоматически сохранен. |
который нужно сохранить вроде) |
Cells.Select Selection.Copy Selection.PasteSpecialОказалось достаточно, работает.Но это, видимо, что-то для каждого моего сохранять. А так, With Next SetКопирование модуля макроса в |
доступен при работе кода — отличный |
нажать клавиши быть буквами, цифрами Microsoft Access. VisualилиПример: Представьте себе, чтоДля выполнения или редактирования в директории «…Обробка»iilfat |
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks изменил и |
|
с именем 1…99.xls |
: _ :=False, Transpose:=FalseActiveWorkbook. Sheets(Array(1, 3)).Copy понимаю. Т.е. вместо отдельную тему |
тема на форуме. End Sub |
Если книга содержит макрос вариант Личная книга на VBA или |
. При этом откроется |
В имени макроса (VBA) является частьютак же, как получаете десятки таблиц на кнопку «Макросы» каждый раз имяManyasha Range(«A1»).Select Sheets(«Титульный»).Select Range(«A1»).SelectРаботает. «xlOpenXMLWorkbook (without macro’sРади интереса попробовал |
sokol92В результатеФайл занимает 52 |
VBA, который нужно макросов. Если вы отточить свои навыки. |
support.office.com
VBA. Как сохранить книгу без макросов в формате .xls
диалоговое окно не должно содержаться
языка программирования Visual при обычном сохранении. из всех филиалов. (или комбинацию клавиш
должно быть +1…надеюсь, спасибо большое) Sheets(«Микроучасток»).Select Range(«Таблица1[[#Headers],[№ п.п]]»).SelectАдаптирую под свои in 2007-2010, xlsx)
поместить Ваш код: Уважаемый PATRI0T, в КБ, а не
использовать где-либо еще, выберете этот параметр,
Пример изменения записанного кода
Макрос пробелов; в качестве Basic. Он доступен Но сохранение книги От вас требуется ALT+F8). Появится окно
более-менее правильно ответилolpit
ActiveWindow.Zoom = 100 нужны отпишу.
» пишем «51» в файл xls, приложенном к сообщению 9, как если этот модуль можно
Excel создаст скрытую можно найти в
. разделителей слов следует в большинстве приложений с макросами происходит организовать данные и со списком записанных о объяснил:)…П.С.: макрос: как создать макрос ‘Преорбазуем таблицы вНиколай и выполняется это ошибка 400, новая файле макросов нет, бы я сохранил скопировать в другую личную книгу макросов статье Начало работыВнимание: использовать знаки подчеркивания. Office. Хотя VBA несколько иначе, поскольку рассчитать показатели, чтобы макросов и кнопками слеплен «из того на сохранение файла диапазоны Dim sh1: На тестовой книге. действие, так? И
книга с копируемым зато есть два его вручную в
книгу с помощью Personal.xlsb (если она
с VBA в
Макросы нельзя отменить. Прежде Если используется имя позволяет автоматизировать процессы необходимо использовать специальный произвести еще один для управления ими.
что было» и с заданным именем, As Worksheet DimОшибка в строке я так понимаю,
листом создается, но «битых» имени книги. формат .xls редактора Microsoft Visual
еще не существует) Excel. чем впервые запускать
макроса, являющееся ссылкой в приложениях Office
формат файла «с ежемесячный отчет. ВыС помощью макропрограмм можно того что выдал чтобы имя состояло
iObj As ListObjectActiveWorkbook.SaveAs sfName1, 51 что RAN своим код в модуле
Удалите их черезИ при открытии Basic. и сохранит макросПеред записью макросов полезно
записанный макрос, сохраните на ячейку, может и между ними, поддержкой макросов». Поэтому можете записать макрос увеличить производительность труда
гугль…поэтому просьба громко из значения заданной For Each sh1При этом сохранение кодом вносит изменения листа остается. «Диспетчер имен» и всплывает сообщение «включитьНазначение макроса объекту, фигуре в нее. Книги знать следующее: книгу или создайте появиться сообщение об вам не нужно при попытке сохранить для выполнения всех пользователя в десятки
не смеятся))) яейки и даты, In Worksheets For новой книги происходит.
в XML? ДальшеА ТС пока проблема с открытием содержимое». или графическому элементу
из этой папкиМакрос, записанный для работы ее копию, чтобы ошибке, указывающее на уметь программировать или макрос Excel предложит этих функций, в раз. Но чтобыФайл удален например, qwert19102010.xls Each iObj InВот код. — вообще не так и молчит
должна уйти.Что не так?На листе щелкните правой автоматически открываются при с диапазоном Excel,
предотвратить внесение нежелательных недопустимое имя макроса.. знать язык VBA, два варианта: том числе открытие использовать запись пользовательских- велик размерЗаранее спасибо sh1.ListObjects iObj.Unlist Next
Sub кол_вх() Dim понимаю — ведь — из какой_Igor_61 Что не удаляется? кнопкой мыши объект, каждом запуске Excel, будет выполняться только изменений. Если васЧтобы назначить сочетание клавиш
так как всеСохранить в виде книги и соединение всех макросов на все — [R Dmitry Next ‘Макрос сохранения s As String, если открыть файл версии ему в: Да, если этоВопрос. рисунка, фигуры или а макросы, сохраненные для ячеек этого
не устраивают результаты для запуска макроса,
нужные действия выполнит с поддержкой макросов листов в одну 100% следует соблюдатьМОДЕРАТОРЫ: а поиск или книги со старым
fldr As String через WinRAR, там xls нужно сохранять так, то неА можно ли
элемент, к которому в таких книгах, диапазона. Поэтому если выполнения макроса, вы в поле средство записи макросов. (XLSM-файл), выбрав комбинированную таблицу. простые правила, которые] макрорекордер не помогает? именем и новым fldr = «D:111″ же куча папокЮрий М удивительно, что у сохранить заявку из нужно назначить существующий указываются в окне вы добавите в можете закрыть книгу,Сочетание клавишВажно знать, что приНетИспользуйте кнопки со стрелками
существенно влияют наЮрий МSub Макрос1() расширением xlsx Dim
s = Dir(fldr и файлов XML,: $ в имени него мой макрос этого файла без макрос и выберите «Макрос» (см. следующий диапазон новую строку, не сохраняя ее.введите любую строчную записи макроса регистрируются. для управления курсором их качество в: Я же просил:Dim a$, d$ sfName1$ Dim sh & «*.xls») Do т.е. в данном переменной — это не работает, если макросов, не прибегая команду раздел). макрос не будетНиже приведены дополнительные сведения или прописную букву. почти все вашиСохранить в виде книги (Ctrl + Up, момент записи иПри таком Вашемa = Cells(1, As Worksheet, nm While s <> случае через «51» тип (аналог as он его в
к обращению кНазначить макросЧтобы назначить сочетание клавиш применяться к ней. о работе с Рекомендуется использовать сочетания действия. Поэтому если без поддержки макросов,
и т.п.). Позиционируйте эффективность при выполнении. отношении тему покидаю. 1) ‘a1 name As Name sfName1
«» With Workbooks.Open(fldr производятся манипуляции с String). Вот табличка xls помещает. Но объектной модели?.
для запуска макроса,
Если вам нужно записать
макросами в Excel.
клавиш с
вы допустите ошибку,
выбрав
курсор, так чтобыvfr800d = Cells(2, = ActiveWorkbook.FullName sfName1 & s) Dim конкретным XML файлом, соответствий: почему-то он проТ.к. этот файлик
В поле в поле длинную последовательность задач,
Задача
CTRL например нажмете не
Да
вы могли добавить,5 простых советов, которые
: Простите, исправился!Может дадите 1) ‘a2 data
= Replace(sfName1, «xlsm», sfName1$, sfName2$ Dim
«51» его находитInteger — %
этот момент молчит. рассылается клиентам, и
Назначить макросаСочетание клавиш
советуем вместо этогоОписание
+ ту кнопку, средство
. изменить или удалить
помогут в создании последний шанс на
ActiveWorkbook.SaveAs Filename:= _ «xlsx») Application.ScreenUpdating =
sh As Worksheet, и выполняет своюLong — & А я решил,
нужно обязательно делатьвыберите макрос, которыйвведите любую строчную
использовать несколько болееИзменение параметров безопасности макросовSHIFT записи макросов зарегистрирует
Чтобы сохранить макрос как данные внутри таблицы макросов без программирования. помощь?»C:» & a
False Application.CopyObjectsWithCells = nm As Name задачу?Single — !
что у него
соотв. настройки у вы хотите назначить.
или прописную букву. мелких макросов. в Excel, так как они это действие. В книгу с поддержкой по мере необходимости. Воспользуйтесь этими простымиСварог & d & False ActiveWorkbook.Sheets(Array(1, 2, sfName1 = ActiveWorkbook.FullNameЮрий МDoble — # изначальный файл в них..Назначение макроса кнопке Рекомендуется использовать сочетанияВ макросе могут содержатьсяСведения о параметрах безопасности будут заменять собой таком случае можно макросов,Использование мыши для навигации советами, которые позволяют: У меня та «.xls» 3, 5)).Copy ‘Преобразование sfName1 = Replace(sfName1,: XML тут нетCurrency — @ xlsm, глядя наА клиенты разныеВы можете назначить макрос клавиш, которые еще и задачи, не макросов и их совпадающие с ними снова записать всющелкните является более сложным
быстро и просто же ситуация. ЖдуEnd Sub формул в значения, «xlsm», «xlsx») sfName2
) Просто заменяемString — $ картинку и нервные.. Можно значку и добавить не назначены другим относящиеся к Excel. значении.
стандартные сочетания клавиш последовательность или изменитьНет и не так создавать качественные макропрограммы ответа вместе с
vfr800 не всегда работает = Left(sfName1, Len(sfName1) длинную строку числомПо поводу строкLAD ли как-то этого его на панель командам, так как Процесс макроса можетЗапуск макроса в Excel, пока код VBA. Поэтому. надежным в момент
автоматически: vfr800. А пока: Доброго времени суток корректно, оставил просто — 1) Application.ScreenUpdating ) 4 и 5:
: избежать?
быстрого доступа или они будут переопределять
охватывать прочие приложенияМакросы можно запускать различными открыта книга, содержащая
перед записью процессаВ окне
записи. Когда дело
Присваивайте макросам короткие, но
полажу в его
всем! Не хотел так. For Each = False Application.CopyObjectsWithCells_Igor_61 сначала получили путь,Вы копируете лист со_Igor_61: Можно. Побаловался макрорекордером ленту.
совпадающие с ними Office и другие
способами, например с макрос. Например, если
следует хорошо проработатьСохранить как доходит до макросов, содержательные имена. Когда
файле.
плодить новую тему, sh In ActiveWorkbook.Worksheets
= False ActiveWorkbook.Sheets(Array(1,
: xlOpen а потом в
всеми потрохами. Копируйте и у меня
Назначение макроса для элемента стандартные сочетания клавиш программы, которые поддерживают
помощью сочетания клавиш,
назначить сочетание клавиш его. Чем точнее
в раскрывающемся списке
использовать мышь лучше
вы войдете вкус,Макросы позволяют существенно расширить
но поиск тоже sh.UsedRange.Value = sh.UsedRange.Value
2, 3, 4)).Copy
XML
этой строке произвели только то, что
получилось
управления на листе в Excel, пока Visual Basic для графического объекта, панелиCTRL+Z вы запишете последовательность,Тип файла только для вызова со временем вам возможности в программе прошерстил и не Next ‘Удаление именнованных For Each shWorkbook — тогда это замену: xlsm заменили Вам нужно. СделайтеPATRI0TВы можете назначать макросы открыта книга, содержащая приложений (VBA). Например, быстрого доступа, кнопки(Отменить), вы не тем более эффективновыберите меню. придется создавать много Excel. Они автоматизируют нашел ответа на диапазонов показать по In ActiveWorkbook.Worksheets sh.UsedRange.Value просто указание на на xlsx. В новый лист и: Спасибо за ответ формам и элементам макрос. вы можете записать
или даже при
сможете использовать его будет работать макрос.Книга Excel с поддержкойДержите ваши макросы для
макросов. При выборе рабочие процессы и
свой вопрос. А
ctrl+F3 For Each = sh.UsedRange.Value Next книгу xlsx 2007-2010,
принципе можно было
на него скопируйтеТолько я ничего ActiveX на листе.В поле
макрос, который сначала открытии книги. для функции «Отменить»Макросы и средства VBA макросов небольших специфичных задач. в диалоговом окне берут большую часть вопрос заключается в n In ActiveWorkbook.Names: For Each nm этим кодом ее и в одной диапазон ячеек. не понял, почемуОткрытие редактора Visual BasicОписание обновляет таблицу вИзменение макроса в данном экземпляре находятся на вкладке. Чем больше программный их легче найти рутинной работы пользователя следующем: есть файл On Error Resume In ActiveWorkbook.Names nm.Delete открываем? строке сделать.RAN у меня неНа вкладкепри необходимости введите Excel, а затемС помощью редактора Visual Excel.РазработчикНажмите кнопку код в макросе, с короткими и на себя. Просто А.xls в директории Next n.Delete: Next Next Application.DisplayAlerts =Юрий М51 и 56: _Igor_61, Вставьте это работает. Вроде кодРазработчик краткое описание действий открывает Outlook для Basic можно изменятьВ списке, которая по умолчаниюСохранить тем медленнее он содержательными названиями. Система нужно научится пользоваться «C:Папка1″…в файле запускается Application.DisplayAlerts = False False ActiveWorkbook.SaveAs sfName1,: Нет, открываем по — это константы в модуль копируемого такой жещелкните макроса. ее отправки по макросы, присоединенные кСохранить в скрыта, поэтому сначала. работает, особенно если VBA предоставляет вам макросами и производительность макрос, который открывает ActiveWorkbook.SaveAs sfName1, 51 51 ActiveWorkbook.Close False имени, а это типов файлов. листа, и вауА зачем это?Visual BasicХотя это необязательная в электронной почте. книге.выберите книгу, в нужно включить ее.Чтобы макросы были доступны это требуется для возможность указать описание труда возрастет в и изменяет файл ActiveWorkbook.Close False Application.DisplayAlerts Workbooks.Open sfName1 ActiveWorkbook.SaveAs
указание ТИПА файла=== съедят мыши.
Kill Addr &или выберите поле Описание, рекомендуетсяМакросы и средства VBA
planetaexcel.ru
Сохранить макрос в Excel 2013 (Иное/Other)
Копирование модуля макроса в которой вы хотите
Дополнительные сведения см. при каждом запуске выполнения многих функций к имени. Обязательно десятки раз! В.xls и после = True Application.CopyObjectsWithCells sfName2, 56 ActiveWorkbook.Close — книга без// константы форматов
Sub Мяу() Dim «Файл без макросовСервис введите один. Полезно находятся на вкладке другую книгу сохранить макрос. в статье Отображение
Excel, создайте их
или рассчитать много используйте ее.Вам даже не нужно
внесенных изменений файл = True ‘Закрываем False Kill sfName1 макросов. 2003 sfName1$, sfName2$ Dim
2007.xlsx> введите понятное описаниеРазработчик
Если книга содержит макросКак правило, макросы сохраняются вкладки «Разработчик». в книге «Personal.xlsb». формул в большойИмя макроса обязательно должно
быть программистом и B.xls нужно сохранить книгу с сохранением Application.DisplayAlerts = True
_Igor_61// xlCSVWindows = 23; sh As Worksheet,Александр П.
excelworld.ru
как создать макрос на сохранение файла с заданным именем
Макрос сведениями, которые могут, которая по умолчанию VBA, который нужно в расположенииПеред записью макросов полезно Это скрытая книга электронной таблице.
начинаться с букв
знать язык программирования в «C:Папка2» с изменений ActiveWorkbook.Close False
Application.CopyObjectsWithCells = True
: А, кажется понял:
// xlDBF2 = nm As Name
: PATRI0T, Код ниже>
быть полезны для
скрыта, поэтому сначала использовать где-либо еще,Эта книга
знать следующее:
на вашем компьютере,Если вы запустите каждый и не может «VBA» чтобы создавать именем 1.xls, при ‘если поставить False .Close 0 End ActiveWorkbook.SaveAs sfName1, 51 7; sfName1 = ThisWorkbook.FullName удаляет весь кодРедактор Visual Basic вас или других нужно включить ее. этот модуль можно, но если выМакрос, записанный для работы которая открывается при процесс отдельно, вы содержать пробелы, символы свои макро-программы с чем у меня — книга будет With s = — сохраняем активную// xlDBF3 = sfName1 = Replace(sfName1, во всех модулях. пользователей, которые будутВыберите скопировать в другую хотите, чтобы макрос с диапазоном Excel, каждом запуске Excel. можете быстро просмотреть или знаки препинания. помощью инструмента записи проблемма с циклом. закрыта без сохранения Dir Loop End книгу с заданным 8;
«xlsm», «xlsx») sfName2 активной книги.Поиск справки по использованию выполняться макрос. ПриExcel книгу с помощью
был всегда доступен будет выполняться только Для получения сведений результаты для проверки После первого символа, макросов. Его нужно написать sFiles = Dir Sub именем (sfName1) в
// xlDBF4 = = Left(sfName1, Len(sfName1)Sub test() Set редактора Visual Basic создании много макросы,> редактора Microsoft Visual при работе в для ячеек этого о выполнении этих
точности их выполнения. вы можете использоватьСначала надо включить панель таким образом чтоб Loop ‘возвращаем ранееИ скрин ошибки. xlsx (xlOpenXMLWorkbook (without 11; — 1) Application.ScreenUpdating VBComp = ActiveWorkbook.VBProject.VBComponentsУзнайте, как найти справку описание помогут вамПараметры Basic. Excel, выберите пункт диапазона. Поэтому если действий см. статьюЕсли нельзя разбить длинный больше букв, цифр разработчика. Для этого в «C:Папка2» файлы отключенное обновление экрана
Файла Книга1.xls в macro’s in 2007-2010,// xlDIF = = False Application.CopyObjectsWithCells For Each cl
по элементам Visual быстро определять, какие
>Назначение макроса объекту, фигуре
Личная книга макросов. вы добавите в Создание и сохранение макрос на короткие
или нижнее подчеркивание, в меню «Файл» были именно с Application.ScreenUpdating = True каталоге НЕТ. Прикрепленные xlsx) . И 9;
planetaexcel.ru
Как работать с макросами в Excel 2010 без программирования кода
= False Sheets(Array(1, In VBComp cl.CodeModule.DeleteLines Basic. макрос по исполнителям,Лента и панель или графическому элементу Если выбрать этот диапазон новую строку, всех макросов в приложения, а требуется но максимальная длина
открываем группу опций именами 1.xls…2.xls…99.xls(файлов около .Label1.Caption = «ГОТОВО» файлы 2017-10-07_214428.png (3.53 равнозначно — можно// xlExcel9795 = 3)).Copy For Each
1, cl.CodeModule.CountOfLines NextPATRI0T в противном случае.На листе щелкните правой вариант, Excel создаст макрос не будет одной книге. проверить его функциональность имени составляет 80 «Параметры». В появившемся 100шт.)Подскажите плиз как End With End КБ) записать текстом «xlOpenXMLWorkbook
43; sh In ActiveWorkbook.Worksheets End Sub: Добрый день. может потребоваться угадать.В категории кнопкой мыши объект,
Применение VBA и макросов в Microsoft Excel
скрытую личную книгу применяться к ней.Примечание: пошагово («отладкой»). Нажмите символов. окне «Параметры Excel» правильно реализовать такой SubНиколай (without macro’s in// xlTextWindows = sh.UsedRange.Value = sh.UsedRange.Value
_Igor_61В Excel сделалЧтобы начать запись макроса,Настроить ленту рисунка, фигуры или макросов Personal.xlsb (еслиЕсли вам нужно записать Мы стараемся как можно клавишу F8 каждыйАбсолютный адрес ячейки – открываем группу «Настройка цикл макросом?В VBA
Огромная благодарность RAN,: Опа. 2007-2010, xlsx», а
- 20; Next For Each
- : Покажите Ваш файл небольшую форму для нажмите кнопку
- в списке элемент, к которому она еще не длинную последовательность задач,
- оперативнее обеспечивать вас раз, когда вы это точное местонахождение ленты». Обратите внимание не силен, а за его кодУдаление строк можно «51». Я
// xlUnicodeText = nm In ActiveWorkbook.Names с кодом, который приема заказов наОКОсновные вкладки нужно назначить существующий существует) и сохранит советуем вместо этого актуальными справочными материалами хотите перейти к курсора, когда информация
на правую колонку
Как работать с макросами в Excel
штопаю макросы макроредактором(а сохранения файлов.Workbooks.Open sfName1 ActiveWorkbook.SaveAs правильно понимаю? 42; nm.Delete Next Application.DisplayAlerts не работает. Смею мебельном производстве.
1 Правильные имена в макросах.
.установите флажок макрос и выберите макрос в ней. использовать несколько более на вашем языке. следующему шагу выполнения о его размещении настроек под аналогичным там жесткая привязкаLAD sfName2, 56 ActiveWorkbook.CloseПростите за навязчивость,// xlWebArchive =
= False ActiveWorkbook.SaveAs предположить, что ВыИ потом заявкуВыполните действия, которые нужноРазработчик командуВ поле мелких макросов. Эта страница переведена задачи. Процесс выполнения записывается в макро-адреса названием «Настройка ленты».
2 Используйте относительные (не абсолютные) адреса ячеек
к именам файлов: Не думал, что False Kill sfName1 просто хочу правильно 45; sfName1, 51 ActiveWorkbook.Close что-то не так нужно сохранить в записать., а затем нажмитеНазначить макросОписаниеВ макросе могут содержаться автоматически, поэтому ее программы останавливается, когда с жесткой привязкой В ней следует и книг), поэтому
можно так сильноРешило проблему. все уяснить для// xlXMLSpreadsheet = False Workbooks.Open sfName1 или не туда отдельном .xls файлеНа вкладке кнопку
3 Всегда начинайте запись с курсором в A1
.при необходимости введите и задачи, не текст может содержать он видит ошибку. к конкретной ячейке отметить галочкой опцию с синтаксисом написания извратить.Николай себя, чтобы все 46; ActiveWorkbook.SaveAs sfName2, 56 вставили или что-то , для импортаРазработчикСохранитьВ поле краткое описание действий относящиеся к Excel. неточности и грамматические Вы можете исправить в момент записи. «Разработчик» как показано кода не дружу…огромная
iilfat: Вот как стал правильно понимать и// xlXMLData = ActiveWorkbook.Close False Kill не так сделали, в другую программу.щелкните.Назначить макроса макроса. Процесс макроса может ошибки. Для нас ошибку, которую легко Абсолютные адреса ограничивают ниже на рисунке:
4 Всегда перемещаться с клавиш направления в момент записи макроса
просьба помочь ну: Здравствуйте. выглядеть код в в дальнейшем правильно 47; sfName1 Application.DisplayAlerts = а так жеКод макроса содержитсяОстановить запись
Чтобы записать макрос, следуйтевыберите макрос, которыйХотя поле «Описание» является охватывать прочие приложения важно, чтобы эта найти с помощью возможности макроса, еслиТеперь нам доступна на или хоть указать
5 Создавайте макросы для конкретных небольших задач
Как в Excel итоге. использовать, если понадобится// основные константы True Application.CopyObjectsWithCells = невнимательно посмотрели код, на листе +. инструкциям ниже. вы хотите назначить. необязательным, рекомендуется его
Office и другие статья была вам «отладки» или записать будут добавляться / ленте новая закладка
направление в каком сохранить макрос? ЯSub Микро_на_сдачу() DimНиколай 2007 True End Sub иначе не возникло отдельный модуль…На вкладкеНа вкладкеНазначение макроса кнопке заполнить. Кроме того, программы, которые поддерживают полезна. Просим вас по-новому. удаляться данные на «Разработчик» со всеми
exceltable.com
искать!С нетерпением жду
Экономисты в повседневной работе сталкиваются с рутинной работой: с определенной периодичностью им приходится выполнять одну и ту же последовательность действий для получения определенного отчета, например. Частично автоматизировать такую работу можно с помощью макросов. Причем для написания несложных команд достаточно знать только азы программирования.
Как записать самый простой макрос?
Для начала запишем самый легкий макрос — зададим в ячейке А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.
В этой статье расскажу, что такое макрос, как включить режим разработчика, записать макрос и назначить его на кнопку.
Здравствуйте, друзья! Думаю, многие из вас (как и я в свое время), кто работает в Microsoft Excel, задавались вопросом автоматизации некоторых задач. Предположим, вам необходимо по щелчку кнопки мгновенно перемещаться между листами книги или распечатать область на листе в определенном количестве копий. В этом и многом другом нам помогут макросы.
Макрос — это действие (или последовательность действий), записанное на языке программирования Visual Basic for Applications (VBA), которое можно выполнить сколько угодно раз.
Для работы с макросами необходимо открыть специальное окно – редактор программ на VBA, встроенный в Microsoft Excel, который доступен при включенном режиме Разработчика. Чтобы включить режим разработчика, нужно перейти по пути: Файл – Параметры – Настроить ленту и поставить в правой части окна флажок Разработчик.
В ленте появится вкладка «Разработчик», в которой есть кнопка для запуска редактора Visual Basic.
Макрос можно записать двумя способами
- Вручную в редакторе (для сложных макросов и процедур);
- С помощью функции «Запись макроса», которая находится во вкладке Разработчик.
Для начала, разберем первый способ – запишем макрос вручную. Например, у нас есть код макроса для печати активного листа:
Sub Print_1()
ActiveSheet.UsedRange.PrintOut
End Sub
– Каждый макрос начинается с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки нужно оставить пустыми.
– Каждый макрос заканчивается оператором End Sub.
– Все, что находится между Sub и End Sub – тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае наш макрос при запуске будет распечатывать активный лист, либо заданную пользователем область печати на активном листе.
Макросы хранятся в модулях. В любой книге Excel мы можем создать любое количество модулей и разместить там наши макросы. Один модуль может содержать любое количество макросов. Доступ ко всем модулям осуществляется с помощью окна VBA Project в левом верхнем углу редактора
Чтобы создать модуль, нужно открыть во вкладке «Разработчик» редактор Visual Basic, в окне VBA Project щелкнуть правой кнопкой мыши и выбрать Insert – Module.
Появится вкладка «Modules», в которой находится наш модуль «Module1». Копируем код макроса и вставляем его в наш модуль.
Готово, макрос записан. Теперь нужно определиться с запуском макроса. Макрос можно запустить несколькими способами:
– Во вкладке «Разработчик» нажать кнопку «Макросы», в появившемся окне выбрать наш макрос и нажать «Выполнить»;
– С помощью горячих клавиш, сочетание которых можно установить в том же окне, нажав кнопку «Параметры»;
– Назначить макрос на кнопку, размещенную на листе. Этот способ рассмотрим более подробно.
Для начала, добавим кнопку на лист, который нужно распечатать. Для этого откроем вкладку «Вставка» и выберем Иллюстрации-Фигуры.
Выбираем любую фигуру (я выбрал прямоугольник), затем щелкаем левой кнопкой мыши на листе и растягиваем фигуру. Получилась кнопка, которую можно отформатировать (поменять цвет, вставить надпись и т.д.). Щелкаем по кнопке правой кнопкой мыши, выбираем «Назначить макрос», выбираем наш макрос Print1 из списка, жмем «Ок».
Макрос назначен на кнопку. Теперь, при нажатии кнопки, активный лист (или установленная на нем область печати) будет мгновенно распечатана.
Второй способ: запишем макрос при помощи макрорекордера. Например, у нас есть книга с двумя листами (Лист1 и Лист2). Нам нужно, чтобы по нажатию кнопки на Листе1 мы переходили на Лист2. Открываем Лист1, создаем на нем кнопку. Переходим во вкладку «Разработчик» и жмем кнопку «Запись макроса».
Задаем имя макроса без пробелов (в моем случае это ПереходЛист2), по желанию задаем сочетание клавиш и жмем «Ок». Запись началась. Открываем Лист2 и жмем во вкладке «Разработчик» кнопку «Остановить запись». Готово, макрос записан. Чтобы посмотреть код, заходим в редактор Visual Basic. Макрос записался в Module2.
Назначаем макрос на кнопку, которую мы предварительно создали на Листе1. Готово, теперь при нажатии на кнопку мы переместимся на Лист2.
После того, как макрос записан, необходимо сохранить нашу книгу с поддержкой макросов. Жмем Файл – Сохранить как, выбираем папку и в списке «Тип файла» выбираем «Книга excel с поддержкой макросов».
Нажимаем «Сохранить». В выбранной папке сохранится копия нашего файла, но с расширением .xlsm и с работающими макросами.
Вы можете скачать инструкцию в формате .docx по ссылке ниже
Жду ваших отзывов и комментариев! С уважением, Дмитрий.
Excel Macros — Overview
An Excel macro is an action or a set of actions that you can record, give a name, save and run as many times as you want and whenever you want. When you create a macro, you are recording your mouse clicks and keystrokes. When you run a saved macro, the recorded mouse clicks and keystrokes will be executed in the same sequence as they are recorded.
Macros help you to save time on repetitive tasks involved in data manipulation and data reports that are required to be done frequently.
Macro and VBA
You can record and run macros with either Excel commands or from Excel VBA.
VBA stands for Visual Basic for Applications and is a simple programming language that is available through Excel Visual Basic Editor (VBE), which is available from the DEVELOPER tab on the Ribbon. When you record a macro, Excel generates VBA code. If you just want to record a macro and run it, there is no need to learn Excel VBA. However, if you want to modify a macro, then you can do it only by modifying the VBA code in the Excel VBA editor.
You will learn how to record a simple macro and run it with Excel commands in the chapter — Creating a Simple Macro. You will learn more about macros and about creating and / or modifying macros from Excel VBA editor in the later chapters.
Personal Macro Workbook
A macro can be saved in the same workbook from where you recorded it. In that case, you can run the macro from that workbook only and hence you should keep it open. Excel gives you an alternative way to store all your macros. It is the personal macro workbook, where you can save your macros, which enables you to run those macros from any workbook.
You will learn about Personal Macro Workbook in the chapter — Saving all your Macros in a Single Workbook.
Macro Security
Macros will be stored as VBA code in Excel. As with the case of any other code, macro code is also susceptible to malicious code that can run when you open a workbook. This is a threat to your computer. Microsoft provided with the Macro Security facility that helps you in protecting your computer from such macro viruses.
You will learn more about this in the chapter — Macro Security.
Absolute References and Relative References
While recording a macro, you can use either absolute references or relative references for the cells on which you are clicking. Absolute references make your macro run at the same cells where you recorded the macro. On the other hand, relative references make your macro run at the active cell.
You will learn about these in the chapters — Using Absolute References for a Macro and Using Relative References for a Macro.
Macro Code in VBA
You can record and run macros from Excel even if you do not know Excel VBA. However, if you have to modify a recorded macro or create a macro by writing VBA code, you should learn Excel VBA. You can refer to the Excel VBA tutorial in this tutorials library for this
However, you should know how to view the macro code. You can learn how to access VBA editor in Excel and about the different parts of the VBA editor in the chapter – Excel VBA.
You can learn how to view the macro code in Excel VBA editor and you can understand the macro code in the chapter — Understanding Macro Code.
Assigning Macros to Objects
You can assign a macro to an object such as a shape or a graphic or a control. Then, you can run the macro by clicking on that object. You will learn about this in the chapter — Assigning Macros to Objects.
Running Macros
Excel provides several ways to run a macro. You can choose the way you want to run a macro. You will learn about these different possible ways of running a macro in the chapter — Running a Macro.
Creating a Macro Using VBA Editor
If you decide to write the macro code, you can learn it in the chapter — Creating a Macro Using VBA Editor. However, the prerequisite is that you should have Excel VBA knowledge.
Editing a Macro
You can modify macro code in Excel VBA editor. If you want to make extensive changes, you should have Excel VBA knowledge. But, if you want to make only minor changes to the code or if you want to copy the VBA code from a recorded macro to another macro, you can refer to the chapter — Editing a Macro.
You can rename a macro and even delete it. You will learn about this also in the same chapter.
User Forms
A Form is normally used to collect required information. It will be self-explanatory making the task simple. Excel User Forms created from Excel VBA editor serve the same purpose, providing the familiar options such as text boxes, check boxes, radio buttons, list boxes, combo boxes, scroll bars, etc. as controls.
You will learn how to create a User Form and how to use the different controls in the chapter – User Forms.
Debugging Macro Code
At times, a macro may not run as expected. You might have created the macro or you might be using a macro supplied to you by someone. You can debug the macro code just as you debug any other code to uncover the defects and correct them. You will learn about this in the chapter — Debugging Macro Code.
Configuring a Macro to Run on Opening a Workbook
You can make your macro run automatically when you open a workbook. You can do this either by creating an Auto_Run macro or by writing VBA code for workbook open event. You will learn this in the chapter — Configuring a Macro to Run on Opening a Workbook.
Excel Macros — Creation
You can create a macro with Excel commands by recording the key strokes and mouse clicks, giving the macro a name and specifying how to store the macro. A macro thus recorded can be run with an Excel command.
Suppose you have to collect certain results repeatedly in the following format −
Instead of creating the table each time, you can have a macro to do it for you.
Recording a Macro
To record a macro do the following −
- Click the VIEW tab on the Ribbon.
- Click Macros in the Macros group.
- Select Record Macro from the dropdown list.
The Record Macro dialog box appears.
-
Type MyFirstMacro in the Macro name box.
-
Type A Simple Macro in the Description box and click OK.
Remember that whatever key strokes and mouse clicks you do, will be recorded now.
-
Click in the cell B2.
-
Create the table.
-
Click in a different cell in the worksheet.
-
Click the VIEW tab on the Ribbon.
-
Click Macros.
-
Select Stop Recording from the dropdown list.
Your macro recording is completed.
The first step to click on a particular cell is important as it tells where exactly the macro has to start placing the recorded steps. Once you are done with the recording, you have to click Stop Recording to avoid recording of unnecessary steps.
Running a Macro
You can run the macro you have recorded any number of times you want. To run the macro, do the following −
- Click on a new worksheet.
Note the active cell. In our case, it is A1.
-
Click the VIEW tab on the Ribbon.
-
Click Macros.
-
Select View Macros from the dropdown list.
The Macro dialog box appears.
Only the macro that you recorded appears in the Macros list.
-
Click the macro name – MyFirstMacro in the Macro dialog box. The description you typed while recording the macro will get displayed. Macro description allows you to identify for what purpose you have recorded the macro.
-
Click the Run button. The same table that you have created while recording the macro will appear in just a split of a second.
You have discovered the magic wand that Excel provides you to save time on mundane tasks. You will observe the following −
-
Though the active cell before running the macro was A1, the table is placed in the cell B2 as you have recorded.
-
In addition, the active cell became E2, as you have clicked that cell before you stopped recording.
You can run the macro in multiple worksheets with different active cells before running the macro and observe the same conditions as given above. Just keep a note of this and you will understand later in this tutorial why it has occurred so.
You can also have a macro recording that places your recorded steps in the active cell. You will learn how to do this as you progress in the tutorial.
Storing a Macro
You might wonder how to save the macros that are created. In this context you need to know −
- Storing a macro
- Saving a macro enabled file
As and when you create a macro, you can choose where to store that particular macro. You can do this in the Record Macro dialog box.
Click the box — Store macro in. The following three options are available −
- This Workbook.
- New Workbook.
- Personal Macro Workbook
This Workbook
This is the default option. The macro will be stored in your current workbook from where you created the macro.
New Workbook
This option, though available, is not recommended. You will be asking Excel to store the macro in a different new workbook and mostly it is not necessary.
Personal Macro Workbook
If you create several macros that you use across your workbooks, Personal Macro Workbook provides you with the facility to store all the macros at one place. You will learn more about this option in the next chapter.
Saving a Macro Enabled File
If you had chosen This Workbook as the option for storing the macro, you would need to save your workbook along with the macro.
Try to save the workbook. By default, you would be asking Excel to save the workbook as an .xls file. Excel displays a message saying that an Excel feature VB project cannot be saved in a macro free workbook, as shown below.
Note − If you click Yes, Excel will save your workbook as a macro free .xls file and your macro that you stored with This Workbook option will not get saved. To avoid this, Excel provides you an option to save your workbook as a macro-enabled workbook that will have .xlsm extension.
- Click No in the warning message box.
- Select Excel Macro-Enabled Workbook (*.xlsm) in the Save as type.
- Click Save.
You will learn more about these in later chapters in this tutorial.
Excel Macros — Macros in a Single Workbook
Excel provides you with a facility to store all your macros in a single workbook. The workbook is called Personal Macro Workbook — Personal.xlsb. It is a hidden workbook stored on your computer, which opens every time you open Excel. This enables you to run your macros from any workbook. There will be a single Personal Macro Workbook per computer and you cannot share it across computers. You can view and run the macros in your Personal Macro Workbook from any workbook on your computer.
Saving Macros in Personal Macro Workbook
You can save macros in your Personal Macro Workbook by selecting it as the storing option while recording the macros.
Select Personal Macro Workbook from the drop down list under the category Store macro in.
- Record your second macro.
- Give macro details in the Record Macro dialog box as shown below.
- Click OK.
Your recording starts. Create a table as shown below.
-
Stop recording.
-
Click the VIEW tab on the Ribbon.
-
Click Macros.
-
Select View Macros from the dropdown list. The Macro dialog box appears.
The macro name appears with a prefix PERSONAL.XLSB! indicating that the Macro is in the Personal Macro Workbook.
Save your workbook. It will get saved as an .xls file as the macro is not in your workbook and close Excel.
You will get the following message regarding saving the changes to the Personal Macro Workbook −
Click the Save button. Your macro is saved in the Personal.xlsb file on your computer.
Hiding / Unhiding Personal Macro Workbook
Personal Macro Workbook will be hidden, by default. When you start Excel, the personal macro workbook is loaded but you cannot see it because it is hidden. You can unhide it as follows −
-
Click the VIEW tab on the Ribbon.
-
Click Unhide in the Window group.
The Unhide dialog box appears.
PERSONAL.XLSB appears in the Unhide workbook box and click OK.
Now you can view the macros saved in the personal macro workbook.
To hide the personal macro workbook, do the following −
- Click on the personal macro workbook.
- Click the VIEW tab on the Ribbon.
- Click Hide on the Ribbon.
Running Macros Saved in Personal Macro Workbook
You can run the macros saved in personal macro workbook from any workbook. To run the macros, it does not make any difference whether the personal macro workbook is hidden or unhidden.
- Click View Macros.
- Select the macro name from the macros list.
- Click the Run button. The macro will run.
Adding / Deleting Macros in Personal Macro Workbook
You can add more macros in personal macro workbook by selecting it for Store macro in option while recording the macros, as you had seen earlier.
You can delete a macro in personal macro workbook as follows −
- Make sure that the personal macro workbook is unhidden.
- Click the macro name in the View Macros dialog box.
- Click the Delete button.
If the personal macro workbook is hidden, you will get a message saying “Cannot edit a macro on a hidden workbook”.
Unhide the personal macro workbook and delete the selected macro.
The macro will not appear in the macros list. However, when you create a new macro and save it in your personal workbook or delete any macros that it contains, you will be prompted to save the personal workbook just as in the case you saved it first time.
Excel Macros — Security
The macros that you create in Excel would be written in the programming language VBA (Visual Basic for Applications). You will learn about the Excel macro code in later chapters. As you are aware, when there is an executable code, there is a threat of viruses. Macros are also susceptible to viruses.
What are Macro Viruses?
Excel VBA in which the Macros are written has access to most Windows system calls and executes automatically when workbooks are opened. Hence, there is a potential threat of the existence of a virus written as a macro and is hidden within Excel that are executed on opening a workbook. Therefore, Excel macros can be very dangerous to your computer in many ways. However, Microsoft has taken appropriate measures to shield the workbooks from macro viruses.
Microsoft has introduced macro security so that you can identify which macros you can trust and which you cannot.
Macro Enabled Excel Workbooks
The most important Excel macro security feature is — file extensions.
Excel workbooks will be saved with .xlsx file extension by default. You can always trust workbooks with .xlsx file extension, as they are incapable of storing a macro and will not carry any threat.
Excel workbooks with macros are saved with .xlsm file extension. They are termed as Macro Enabled Excel Workbooks. Before you open such workbooks, you should make sure that the macros they contain are not malicious. For this, you must ensure that you can trust the origin of this type of workbooks.
Ways of Trusting Macro Enabled Workbook
Excel provides three ways to trust a macro enabled workbook.
-
Placing the macro enabled workbooks in a trusted folder
-
Checking if a macro is digitally signed
-
Enabling security alert messages before opening macro enabled workbooks
Placing the macro enabled workbooks in a trusted folder
This is the easiest and best way to manage macro security. Excel allows you to designate a folder as a trusted location. Place all your macro-enabled workbooks in that trusted folder. You can open macro-enabled workbooks that are saved to this location without warnings or restrictions.
Checking if a macro is digitally signed
Digital signatures confirm the identity of the author. You can configure Excel to run digitally signed macros from trusted persons without warnings or restrictions. Excel will also warn the recipient if it has been changed since the author signed it.
Enabling security alert messages before opening macro enabled workbooks
When you open a workbook, Excel warns you that the workbook contains macros and asks whether you wish to enable them. You can click the Enable Content button if the source of the workbook is reliable.
You can set any of these three options in the Trust Center in the Excel Options.
If you work in an organization, the system administrator might have changed the default settings to prevent anyone from changing the settings. Microsoft advises that you do not change security settings in the Trust Center as the consequences can be loss of data, data theft or security compromises on your computer or network.
However, you can learn the macro security settings in the following sections and check if they are to be changed. You have to use your own instinct to decide on any of these options based on the context and your knowledge of the file origin.
Macro Security Settings in Trust Center
The macro settings are located in the Trust Center in the Excel Options. To access the Trust Center, do the following −
-
Click the FILE tab on the Ribbon.
-
Click Options. The Excel Options dialog box appears.
-
Click Trust Center in the left pane.
-
Click the Trust Center Settings button under Microsoft Excel Trust Center.
The Trust Center dialog box appears.
You will see various options available in the Excel Trust Center in the left pane. You will learn about the options related to Excel macros in the following sections.
Macro Settings
Macro settings are located in the Trust Center.
Under Macro Settings, four options are available.
-
Disable all macros without notification − If this option is chosen, Macros and security alerts about macros are disabled.
-
Disable all macros with notification − Macros are disabled, but security alerts appear if there are macros present. You can enable macros on a case-by-case basis.
-
Disable all macros except digitally signed macros − Macros are disabled but security alerts appear if there are macros present. However, if the macro is digitally signed by a trusted publisher, the macro runs if you trust the publisher. If you have do not trust the publisher, you will be notified to enable the signed macro and trust the publisher.
-
Enable all macros (not recommended, susceptible to macro viruses) − If this option is chosen, all macros run. This setting makes your computer vulnerable to potentially malicious code.
You have an additional security option under Developer Macro Settings with a Check box.
-
Trust access to the VBA project object model.
-
This option allows programmatic access to the Visual Basic for Applications (VBA) object model from an automation client.
-
This security option is for code written to automate an Office program and manipulate the VBA environment and object model.
-
It is a per-user and per-application setting, and denies access by default, hindering unauthorized programs from building harmful self-replicating code.
-
For automation clients to access the VBA object model, the user running the code must grant access. To turn on access, select the check box.
-
Defining a Trusted Location
If you think that a macro-enabled workbook is from a reliable source, it is better to move the file to the trusted location identified by Excel, instead of changing the default Trust Center settings to a less-safe macro security setting.
You can find the trusted folder settings in the Trust Center.
Click the Trusted Locations in the Trust Center dialog box. The Trusted Locations set by Microsoft Office appear on the right side.
You can add new locations, remove the existing locations and modify the existing locations. The identified trusted locations will be treated by Microsoft office as reliable for opening files. However, if you add or modify a location, ensure that the location is secure.
You can also find the options that office does not recommend, such as locations on internet.
Digitally Signed Macros from Reliable Sources
Microsoft provides an option to accommodate digitally signed macros. However, even if a macro is digitally signed, you need to ensure that it is from a trusted publisher.
You will find the trusted publishers in in the Trust Center.
-
Click Trusted Publishers in the Trust Center dialog box. A list of certificates appear on the right side with the details – Issued To, Issued By and Expiration Date.
-
Select a certificate and click View.
The certificate information is displayed.
As you have learnt earlier in this chapter, you can set an option to run a macro that is digitally signed only if you trust the publisher. If you do not trust the publisher, you will be notified to enable the signed macro and trust the publisher.
Using Warning Messages
The Message Bar displays security alert when there are macros in the file that you are opening. The yellow Message Bar with a shield icon alerts you that the macros are disabled.
If you know that the macro or macros are from a reliable source, you can click n the Enable Content button on the Message Bar, to enable the macros.
You can disable the Message Bar option if you do not want security alerts. On the other hand, you can enable the Message Bar option to increase security.
Enabling / Disabling Security Alerts on the Message Bar
You can enable / disable security alerts with Message Bars as follows −
- Click the FILE tab on the Ribbon.
- Click Options. The Excel Options dialog box appears.
- Click Trust Center.
- Click the Trust Center Settings button.
- Click Message Bar.
The Message Bar Settings for all Office Applications appear.
There are two options under — Showing the Message Bar.
Option 1 − Show the Message Bar in all applications when active content such as macros is blocked.
-
This is the default option. The Message Bar appears when potentially unsafe content has been disabled.
-
If you had selected — Disable all macros without notification in the Macro Settings of the Trust Center, this option is not selected and the Message Bar does not appear.
Option 2 − Never show information about blocked content.
If this option if selected, it disables the Message Bar and no alerts appear about security issues, regardless of any security settings in the Trust Center.
Excel Macros — Absolute References
Excel macros can be recorded either with absolute references or relative references. A macro recorded with absolute references places the recorded steps exactly in the cells where it was recorded, irrespective of the active cell. On the other hand, a macro recorded with relative references can perform the recorded tasks at different parts on the worksheet.
You will learn about absolute references for macro in this chapter. You will learn about relative references in the next chapter.
Suppose you have to submit a report about your team’s work at the end of every day in the following format −
Now, the report should be placed in the cell B2 and should be in the given format.
A sample filled in report will be as shown below −
Except for the data in the following cells, the information is constant for every report that you generate for the project.
- C3 – Report for Date.
- C13 – No. of Tasks Completed Today.
- C14 – Total No. of Tasks Completed.
- C15 – % Work Complete.
Of these also, in C3 (Report for Date) you can place the Excel function = TODAY () that places the date of your report without your intervention. Further, in cell C15, you can have the formula C14/C12 and format the cell C15 as percentage to have the % Work Complete calculated by Excel for you.
This leaves you with only two cells – C13 and C14 that need to be filled in by you every day. Hence, it would be ideal to have information for the rest of the cells, every time you have to create the report. This saves time for you and you can do the mundane activity of reporting in just few minutes.
Now, suppose you have to send such reports for three projects. You can imagine the time you can save and take up more challenging work for the day and of course get the accolades from your management.
You can achieve this by recording a macro per project and running them on a day-to-day basis to generate the required reports in a matter of just few minutes. However, every time you run the macro, the report should appear on the worksheet as given above, irrespective of the active cell. For this, you have to use absolute references.
Ensuring Absolute References
To record a macro with absolute references, you have to ensure that the macro is being recorded starting from the cell where the steps have to start. This means, in the case of the example given in the previous section, you need to do the following −
- Start recording the macro.
- Create a new worksheet.
- Click in any cell other than B2 in the new worksheet.
- Click in the cell B2.
- Continue recording the macro.
This will create a new worksheet for every new report and get the report format placed in the cell B2 every time you run the macro.
Note − The first three steps given above are essential.
-
If you do not create a new worksheet, when you run the macro, it places whatever you recorded on the same worksheet at the same place. This is not what you want. You need to have every report on a different worksheet.
-
If you do not click in a different cell at the beginning of the recording, even if the active cell is B2, Excel places the recorded steps in the active cell. When you run the macro, it will place the recorded report format at any part of the worksheet based on the active cell. By explicitly clicking in a cell other than B2 and then the the cell B2, you are telling the recorder to always place your macro steps in the cell B2.
Recording a Macro
You can start recording the macro with the Record Macro command on the Ribbon under the VIEW tab → Macros. You can also click the Start Recording Macro button present on left side of the Excel task bar.
-
Start recording the macro. The Record Macro dialog box appears.
-
Give a meaningful name to identify the macro as a report of a particular project.
-
Select This Workbook under Store macro in, as you will produce reports from this specific workbook only.
-
Give a description to your macro and click OK.
Your macro starts recording.
-
Create a new worksheet. This ensures your new report will be on a new worksheet.
-
Click in any cell other than B2 in the new worksheet.
-
Click in the cell B2. This ensures that the macro places your recorded steps in B2 always.
-
Create the format for the report.
-
Fill in the static information for the project report.
-
Place = TODAY () in C3 and = C14/C12 in the cell C15.
-
Format the cells with dates.
Stop recording the macro.
You can stop recording the macro either with the Stop Recording command on the Ribbon under VIEW tab → Macros or by clicking the Stop Recording Macro button present on left side of the Excel task bar.
Your Project Report macro is ready. Save the workbook as a macro-enabled workbook (with .xlsm extension).
Running a Macro
You can generate any number of reports in a few seconds just by running the macro.
- Click the VIEW button on the Ribbon.
- Click Macros.
- Select View Macros from the dropdown list. The Macro dialog box appears.
- Click the macro Report_ProjectXYZ.
- Click the Run button.
A new worksheet will be created in your workbook, with the report stencil created in it in the cell B2.
Excel Macros — Relative References
Relative reference macros record an offset from the active cell. Such macros will be useful if you have to repeat the steps at various places in the worksheet.
Suppose you are required to analyze the data of voters collected from 280 constituencies. For each constituency, the following details are collected −
- Constituency name.
- Total population in the constituency.
- Number of voters in the constituency.
- Number of male voters, and
- Number of female voters.
The data is provided to you in a worksheet as given below.
It is not possible to analyze the data in the above format. Therefore, arrange the data in a table as shown below.
If you attempt to arrange the given data in the above format −
-
It takes substantial amount of time to arrange the data from the 280 constituencies
-
It can be error prone
-
It becomes a mundane task not allowing you to focus on technical things
The solution is to record a macro so that you can complete the task in not more than a few seconds. The macro needs to use relative references, as you will move down the rows while arranging the data.
Using Relative References
In order to let the macro recorder know that it has to use relative references, do the following −
-
Click the VIEW tab on the Ribbon.
-
Click Macros.
-
Click Use Relative References.
Preparing the Data Format
The first step in arranging the above given data is to define the data format in a table with headers.
Create the row of headers as shown below.
Recording a Macro
Record the macro as follows −
-
Click Record Macro.
-
Give a meaningful name, say, DataArrange to the macro.
-
Type = row ()- 3 in the cell B4. This is because the S. No. is the current row number – the 3 rows above it.
-
Cut the cells B5, B6, B7, B8 and B9 and paste it in the cells C4 to C8 respectively.
-
Now click in the cell B5. Your table looks as shown below.
The first data set is arranged in the first row of the table. Delete the rows B6 – B11 and click in the cell B5.
You can see that the active cell is B5 and the next data set will be placed here.
Stop recording the macro. Your macro for arranging the data is ready.
Running a Macro
You need to run the macro repeatedly to complete the data arrangement in the table as given below.
The active cell is B5. Run the macro. The second data set will be arranged in the second row of the table and the active cell will be B6.
Run the macro again. The third data set will be arranged in the third row of the table and the active cell will become B7.
Each time you run the macro, the active cell advances to the next row, facilitating the repetition of recorded steps at the appropriate positions. This is possible because of the relative references in macro.
Run the macro until all the 280 data sets are arranged into 280 rows in the table. This process takes a few seconds and as the steps are automated, the entire exercise is error free.
Excel Macros — VBA
Excel stores the macros as Excel VBA (Visual Basic for Applications) code. After recording a macro, you can view the code that is generated, modify it, copy a part of it, etc. You can even write a macro code yourself if you are comfortable with programming in VBA.
You will learn how to create a macro, by writing a VBA code, in the chapter — Creating a Macro Using VBA Editor. You will learn how to modify a macro by editing VBA code in the chapter — Editing a Macro. You will learn the Excel VBA features in this chapter.
Developer Tab on the Ribbon
You can access macro code in VBA from the Developer tab on the Ribbon.
If you do not find the Developer tab on the Ribbon, you need to add it as follows −
-
Right click on the Ribbon.
-
Select Customize the Ribbon from the dropdown list.
The Excel Options dialog box appears.
-
Select Main Tabs from Customize the Ribbon dropdown list.
-
Check the box – Developer in the Main Tabs list and click OK. The developer tab appears.
Developer Commands for Macros
You need to know the commands that are for macros under the developer tab.
Click the DEVELOPER tab on the Ribbon. The following commands are available in the Code group −
- Visual Basic
- Macros
- Record Macro
- Use Relative References
- Macro Security
The Visual Basic command is used to open the VBA Editor in Excel and the Macros command is used to view, run and delete the macros.
You have already learnt the commands other than VBA Editor in the previous chapters.
VBA Editor
VBA Editor or VBE is the developer platform for VBA in Excel.
Open the workbook – MyFirstMacro.xlsm that you saved earlier in the chapter – Creating a Simple Macro, in this tutorial.
You can open the VBE in any of the two ways −
Option 1 − Click Visual Basic in the Code group under the Developer tab on the Ribbon.
Option 2 − Click Edit in the Macro dialog box that appears when you click VIEW tab → Macros → View Macros
VBE appears in a new window.
The name of your Excel macro enabled workbook name appears with the prefix – Microsoft Visual Basic for Applications.
You will find the following in the VBE −
- Projects Explorer.
- Properties.
- Module window with Code.
Projects Explorer
Project Explorer is where you find the VBA project names. Under a project, you will find Sheet names and Module names. When you click a module name, the corresponding code appears on the right side in a window.
Properties Window
The Properties are the parameters for VBA objects. When you have an object such as command button, its properties will appear in the Properties window.
Module Window with Code
The code of a macro will be stored in a module in VBA. When you select a macro and click Edit, the code of the macro appears in the corresponding module window.
Excel Macros — Understanding Codes
When you record a macro, Excel stores it as a VBA code. You can view this code in the VBA editor. You can understand the code and modify it if you have substantial knowledge of Excel VBA. You can refer to the Excel VBA tutorial in this tutorials library to obtain a grasp on the language.
However, you can still view the macro code in Excel VBA editor and match it to the steps that you recorded in macro. You will learn how to view the code and understand it for the first macro that you created in this tutorial – MyFirstMacro.
Viewing a Macro Code in VBA Editor
To view a macro code, do the following −
- Open the workbook in which you stored the macro.
- Click VIEW tab on the Ribbon.
- Click Macros.
- Select View Macros from the dropdown list.
The Macro dialog box appears.
- Click MyFirstMacro in the macros list.
- Click the Edit button.
The VBA editor opens and the code of the macro MyFirstMacro appears.
Understanding the Recorded Actions as Parts of Code
You can browse through the macro code and map them to your recorded steps.
- Start reading the code.
- Map the code to the recorded steps.
Scroll down the code to view more code. Alternatively, you can enlarge the code window.
Observe that the code is simple. If you learn Excel VBA, you can create the macros by writing the code in the VBA editor.
You will learn how to write a VBA code to create a macro in the chapter — Creating a Macro Using VBA Editor.
Excel Macros — Assigning Macros to Objects
Suppose you have created a macro that you need to execute several times. For example, the macros that you have created for absolute references and relative references. Then, it would be easy for you if you can run the macro using a mouse click. You can accomplish this by assigning the macro to an object such as a shape or a graphic or a control.
In this chapter, you will learn how to include an object in your workbook and assign a macro to it.
Recall the macro that you created using relative references. The macro arranges the data given in one column into a table to facilitate data analysis.
Assigning a Macro to a Shape
You can insert a shape in your worksheet that is in a meaningful form with self-explanatory text, which when clicked runs the macro assigned to it.
-
Click the INSERT tab on the Ribbon.
-
Click Shapes in the Illustrations group.
-
Select any of the ready-made shapes that appear in the dropdown list. For example, the Flowchart shape – Preparation, as you are in the process of preparing the data.
Draw the shape and format it.
-
Right click on the shape and select Edit Text from the dropdown list.
-
Type text inside the shape — Run Macro.
-
Format the text.
- Right click on the shape.
- Select Assign Macro from the dropdown list.
The Assign Macro dialog box appears. Click the macro name i.e. RelativeMacro and click OK.
The macro is assigned to the shape.
-
Click in the cell where you have to run the macro say B4.
-
Move the cursor (pointer) onto the shape. The cursor (pointer) changes to finger.
Now click the shape. The macro will run. Just repeat the mouse clicks to run the macro several times and you are done with the task of arranging the data into a table in a matter of a few seconds.
Assigning a Macro to a Graphic
You can insert a graphic in the worksheet and assign a macro to it. The graphic can be chosen to visualize your macro. For example, you can have a graphic of table representing that the macro will arrange the data into a table.
- Click the INSERT tab on the Ribbon.
- Click Pictures in the Illustrations group.
- Select a file that contains your graphic.
The rest of the steps are the same as those of shape given in the previous section.
Assigning a Macro to a Control
Inserting a VBA control and assigning a macro to it makes your work look professional. You can insert VBA controls from the Developer tab on the Ribbon.
-
Click the DEVELOPER tab on the Ribbon.
-
Click Insert in the Controls group.
Select the Button icon under Form Controls from the dropdown list as shown in screenshot given below −
-
Click the cell on the worksheet where you want to insert the Button control. The Assign Macro dialog box appears.
-
Click the macro name and click OK.
The control button with the assigned macro will be inserted.
- Right click on the button.
- Click Edit Text.
- Type – Run Macro.
- Format Text and resize Button.
You can run the macro any number of times by just clicking the Button repeatedly.
Using Form Controls is an easy and effective way of interacting with the user. You will learn more about this in the chapter – Interacting with the User.
Excel Macros — Running a Macro
There are several ways of executing a macro in your workbook. The macro would have been saved in your macro enabled workbook or in your Personal macro workbook that you can access from any workbook as you had learnt earlier.
You can run a macro in the following ways −
- Running a Macro from the View Tab
- Running a Macro by pressing Ctrl plus a shortcut key
- Running a Macro by clicking a button on the Quick Access Toolbar
- Running a Macro by clicking a button in a Custom Group on the Ribbon
- Running a Macro by clicking on a Graphic Object
- Running a Macro from Developer Tab
- Running a Macro from VBA Editor
Running a Macro from View Tab
You have already learnt running a macro from the View tab on the Ribbon. A quick recap −
- Click the VIEW tab on the Ribbon.
- Click Macros.
- Select View Macros from the dropdown list.
The Macro dialog box appears.
- Click the macro name.
- Click the Run button.
Running a Macro with Shortcut Key
You can assign a shortcut key (Ctrl + key) for a macro. You can do this while recording the macro in the Create Macro dialog box. Otherwise, you can add this later in the Macro Options dialog box.
Adding a Shortcut Key While Recording a Macro
- Click the VIEW tab.
- Click Macros.
- Select Record Macro from the dropdown list.
The Create Macro dialog box appears.
- Type a macro name
- Type a letter, say q, in the box next to Ctrl + under Shortcut key.
Adding a Shortcut Key in Macro Options
- Click the VIEW tab.
- Click Macros.
- Select View Macros from the dropdown list.
The Macro dialog box appears.
- Select the macro name.
- Click the Options button.
The Macro Options dialog box appears. Type a letter, say q, in the box next to Ctrl + under Shortcut key. Click OK.
To run the macro with the shortcut key, press the Ctrl key and the key q together. The macro will run.
Note − You can use any lowercase or uppercase letters for the shortcut key of a macro. If you use any Ctrl + letter combination that is an Excel shortcut key, you will override it. Examples include Ctrl+C, Ctrl+V, Ctrl+X, etc. Hence, use your jurisdiction while choosing the letters.
Running a Macro through Quick Access Toolbar
You can add a macro button to the Quick Access Toolbar and run the macro by clicking it. This option would be useful when you store your macros in personal macro workbook. The added button will appear on the Quick Access Toolbar in whatever workbook you open, thus making it easy for you to run the macro.
Suppose you have a macro with the name MyMacro in your personal macro workbook.
To add the macro button to the Quick Access Toolbar do the following −
-
Right click on the Quick Access Toolbar.
-
Select Customize Quick Access Toolbar from the dropdown list.
The Excel Options dialog box appears. Select Macros from the dropdown list under the category- Choose commands from.
A list of macros appears under Macros.
- Click PERSONAL.XLSB!MyMacro.
- Click the Add button.
The macro name appears on the right side, with a macro button image.
To change the macro button image, proceed as follows −
- Click the macro name in the right box.
- Click the Modify button.
The Modify Button dialog box appears. Select one symbol to set it as the icon of the button.
Modify the Display name that appears when you place the pointer on the Button image on the Quick Access Toolbar to a meaningful name, say, Run MyMacro for this example. Click OK.
The Macro name and the icon symbol change in the right pane. Click OK.
The macro button appears on the Quick Access Toolbar and the macro display name appears when you place the pointer on the button.
To run the macro, just click the macro button on the Quick Access Toolbar.
Running a Macro in Custom Group
You can add a custom group and a custom button on the Ribbon and assign your macro to the button.
- Right click on the Ribbon.
- Select Customize the Ribbon from the dropdown list.
The Excel Options dialog box appears.
- Select Main Tabs under Customize the Ribbon.
- Click New Tab.
The New Tab (Custom) appears in Main Tabs list.
- Click New Tab (Custom).
- Click the New Group button.
The New Group (Custom) appears under New Tab (Custom).
- Click New Tab (Custom).
- Click the Rename button.
The Rename dialog box appears. Type the name for your custom tab that appears in Main tabs on the Ribbon, say — My Macros and click OK.
Note − All the Main tabs on the Ribbon are in uppercase letters. You can use your discretion to use uppercase or lowercase letters. I have chosen lowercase with capitalization of words so that it stands out in the standard tabs.
The new tab name changes to My Macros (Custom).
- Click New Group (Custom).
- Click the Rename button.
The Rename dialog box appears. Type the group name in the Display name dialog box and click OK.
The new group name changes to Personal Macros (custom).
Click Macros in the left pane under Choose commands from.
- Select your macro name, say – MyFirstMacro from the macros list.
- Click the Add button.
The macro will be added under the Personal Macros (Custom) group.
- Click My Macros (Custom) in the list.
- Click the arrows to move the tab up or down.
The position of the tab in the main tabs list determines where it will be placed on the Ribbon. Click OK.
Your custom tab – My Macros appears on the Ribbon.
Click the tab — My Macros. Personal Macros group appears on the Ribbon. MyFirstMacro appears in the Personal Macros group. To run the macro, just click on MyFirstMacro in the Personal Macros group.
Running a Macro by Clicking an Object
You can insert an object such as a shape, a graphic or a VBA control in your worksheet and assign a macro to it. To run the macro, just click the object.
For details on running a macro using objects, refer to chapter – Assigning Macros to Objects.
Running a Macro from the Developer Tab
You can run a macro from the Developer tab.
- Click the Developer tab on the Ribbon.
- Click Macros.
The Macro dialog box appears. Click the macro name and then click Run.
Running a Macro from VBA Editor
You can run a macro from the VBA editor as follows −
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
Creating a Macro Using VBA Editor
You can create a macro by writing the code in the VBA editor. In this chapter, you will learn where and how to write the code for a macro.
VBA Objects and Modules
Before you start coding for a Macro, understand the VBA Objects and Modules.
- Open the macro-enabled workbook with your first macro.
- Click the DEVELOPER tab on the Ribbon.
- Click Visual Basic in the Code group.
The VBA editor window opens.
You will observe the following in the Projects Explorer window −
-
Your macro enabled workbook – MyFirstMacro.xlsm appears as a VBA Project.
-
All the worksheets and the workbook appear as Microsoft Excel Objects under the project.
-
Module1 appears under Modules. Your macro code is located here.
-
Click Module1.
-
Click the View tab on the Ribbon.
-
Select Code from the dropdown list.
The code of your macro appears.
Creating a Macro by Coding
Next, create a second macro in the same workbook – this time by writing VBA code.
You can do this in two steps −
-
Insert a command button.
-
Write the code stating the actions to take place when you click the command button.
Inserting a Command Button
-
Create a new worksheet.
-
Click in the new worksheet.
-
Click the DEVELOPER button on the Ribbon.
-
Click Insert in the Controls group.
-
Select the button icon from Form Controls.
- Click in the worksheet where you want to place the command button.
- The Assign Macro dialog box appears.
The Visual Basic editor appears.
You will observe the following −
- A new module – Module2 is inserted in the Project Explorer.
- Code window with title Module2 (Code) appears.
- A sub procedure Button1_Click () is inserted in the Module2 code.
Coding the Macro
Your coding is half done by the VBA editor itself.
For example, type MsgBox “Best Wishes to You!” in the sub procedure Button1_Click (). A message box with the given string will be displayed when the command button is clicked.
That’s it! Your macro code is ready to run. As you are aware, VBA code does not require compilation as it runs with an interpreter.
Running the Macro from VBA Editor
You can test your macro code from the VBA editor itself.
-
Click the Run tab on the Ribbon.
-
Select Run Sub/UserForm from the dropdown list. The message box with the string you typed appears in your worksheet.
You can see that the button is selected. Click OK in the message box. You will be taken back to the VBA editor.
Running the Macro from Worksheet
You can run the macro that you coded any number of times from the worksheet.
- Click somewhere on the worksheet.
- Click the Button. The Message box appears on the worksheet.
You have created a macro by writing VBA code. As you can observe, VBA coding is simple.
Excel Macros — Editing
You have learnt how to write macro code in VBA editor in the previous chapter. You can edit the macro code, rename a macro and delete a macro.
If you master Excel VBA, writing code or modifying code for a macro is a trivial task. You can edit the macro code however you want. If you want to make only few simple changes in the macro code, you can even copy macro code from one place to another.
Copying a Macro Code
You have created two macros – MyFirstMacro and Button1_Click in the macro enabled workbook MyFirstMacro.xlsm. You have created the first macro by recording the steps and the second macro by writing code. You can copy code from the first macro into the second macro.
-
Open the workbook MyFirstMacro.xlsm.
-
Click the Developer tab on the Ribbon.
-
Click Visual Basic. The Visual Basic editor opens.
-
Open the code for Module1 (MyFirstMacro macro code) and Module2 (Button1_Click () macro code).
-
Click the Window tab on the Ribbon.
-
Select Tile Horizontally from the dropdown list.
You can view the code of the two macros in the tiled windows.
-
Copy the MsgBox line in the Module2 code.
-
Paste it above that line.
-
Modify the string as −
MsgBox “Hello World!”
-
Copy the following code from Module1.
Paste it in the Module2 code in between the two MsgBox lines of code.
-
Click the Save icon to save the code.
-
Click the Button in the Excel sheet. A Message box appears with the message — Hello World! Click OK.
The table data appears (according to the code that you copied) and message box appears with message — Best Wishes to You!
You can modify the code in just a few steps. This is the easiest task for a beginner.
Renaming a Macro
Suppose you want to run the edited macro from any worksheet other than the one that has the command button. You can do it irrespective of button click by renaming the macro.
- Click the VIEW tab on the Ribbon.
- Click Macros.
- Select View Macros from the dropdown list.
The Macro dialog box appears.
- Click the macro name – Button1_Click.
- Click the Edit button.
The macro code appears in the VBA editor.
Change the name that appears in the Sub line from Button1_Click to RenamedMacro. Leave Sub and parenthesis as they are.
Open the Macro dialog box. The macro name appears as you renamed.
- Click RenamedMacro.
- Click the Run button. The macro runs. Now a button click is not necessary.
Deleting a Macro
You can delete a macro that you have recorded or coded.
- Open the Macros dialog box.
- Click the macro name.
- Click the Delete button.
The Delete confirmation message appears.
Click Yes if you are sure to delete the macro. Otherwise, click No.
Excel Macros — UserForms
At times, you might have to collect information repeatedly from others. Excel VBA provides you with an easy way of handling this task- UserForm. As any other form that you fill up, UserForm makes it simple to understand, what information is to be provided. UserForm is user friendly in the way that the controls provided are self-explanatory, accompanied by additional instructions where necessary.
Major advantage of UserForm is that you can save on time that you spend on what and how the information is to be filled.
Creating a UserForm
To create a UserForm, proceed as follows −
- Click the DEVELOPER tab on the Ribbon.
- Click Visual Basic. A Visual Basic window for the workbook opens.
- Click Insert,
- Select UserForm from the dropdown list.
The UserForm appears on the right side of the window.
Understanding the UserForm
Maximize the UserForm.xlsx – UserForm1 window.
You are in the design mode now. You can insert controls on the UserForm and write code for the respective actions. The controls are available in the ToolBox. Properties of UserForm are in the Properties window. UserForm1 (caption of the UserForm) is given under Forms in the Projects Explorer.
- Change the caption of the UserForm to Project Report – Daily in the properties window.
- Change the name of the UserForm to ProjectReport.
The changes are reflected in the UserForm, properties and project explorer.
Controls in the ToolBox
A UserForm will have different components. As and when you click on any of the components, either you will be provided with instructions on what and how the information is to be provided or you will be provided with options (choices) to select from. All these are provided by means of ActiveX controls in the ToolBox of the UserForm.
Excel provides two types of controls – Form controls and ActiveX controls. You need to understand the difference between these two types of controls.
Form controls
Form controls are the Excel original controls that are compatible with earlier versions of Excel, starting with Excel version 5.0. Form controls are also designed for use on XLM macro sheets.
You can run macros by using Form controls. You can assign an existing macro to a control, or write or record a new macro. When the control is clicked, the macro. You have already learnt how to insert a command button from Form controls in the worksheet to run a macro. However, these controls cannot be added to a UserForm.
ActiveX controls
ActiveX controls can be used on VBA UserForms. ActiveX controls have extensive properties that you can use to customize their appearance, behavior, fonts and other characteristics.
You have the following ActiveX controls in the UserForm ToolBox −
- Pointer
- Label
- TextBox
- ComboBox
- ListBox
- CheckBox
- OptionButton
- Frame
- ToggleButton
- CommandButton
- TabStrip
- MultiPage
- ScrollBar
- SpinButton
- Image
In addition to these controls, Visual Basic provides you with MsgBox function that can be used to display messages and/or prompt the user for an action.
In the next few sections, you will understand these controls and MsgBox. Then, you will be in a position to choose which of these controls are required to design your UserForm.
Label
You can use Labels for identification purpose by displaying descriptive text, such as titles, captions and / or brief instructions.
Example
TextBox
You can use a TextBox that is a rectangular box, to type, view or edit text. You can also use a TextBox as a static text field that presents read-only information.
Example
List Box
You can use a List Box to display a list of one or more items of text from which a user can choose. Use a list box for displaying large numbers of choices that vary in number or content.
- Insert a ListBox on the UserForm.
- Click on the ListBox.
- Type ProjectCodes for Name in the Properties window of the ListBox.
There are three types of List Boxes −
-
Single-selection List box − A single-selection List Box enables only one choice. In this case, a list box resembles a group of option buttons, except that a list box can handle a large number of items more efficiently.
-
Multiple selection List Box − A multiple selection List Box enables either one choice or contiguous (adjacent) choices.
-
Extended-selection List Box − An extended-selection List Box enables one choice, contiguous choices and noncontiguous (or disjointed) choices.
You can select one of these types of List Boxes, from the Properties window.
- Right click on the UserForm.
- Select View Code from the dropdown list. The code window of UserForm opens.
- Click Initialize in the top right box of the code window.
- Type the following under Private Sub UserForm_Initialize().
ProjectCodes.List = Array ("Proj2016-1", "Proj2016-2", "Proj2016-3", "Proj20164", "Proj2016-5")
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
Next, you can write code for actions on selecting an item in the list. Otherwise, you can just display the text that is selected, which is the case for filling the Project Code in the Report.
ComboBox
You can use ComboBox that combines a text box with a list box to create a dropdown list box. A combo box is more compact than a list box but requires the user to click the down arrow to display the list of items. Use a combo box to choose only one item from the list.
- Insert a ComboBox on the UserForm.
- Click the ComboBox.
- Type ProjectCodes2 for Name in the Properties window of the ComboBox.
- Right click on the UserForm.
- Select View Code from the dropdown list.
- The code window of UserForm opens.
Type the following as shown below.
ProjectCodes2.List = Array ("Proj2016-1", "Proj2016-2", "Proj2016-3", "Proj20164", "Proj2016-5")
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
Click the down arrow to display the list of items.
Click on the required item, say, Project2016-5. The selected option will be displayed in the combo box.
CheckBox
You can use check boxes to select one or more options that are displayed by clicking in the boxes. The options will have labels and you can clearly visualize what options are selected.
A check box can have two states −
- Selected (turned on), denoted by a tick mark in the box
- Cleared (turned off), denoted by a clear box
You can use check boxes for selection of options in a combo box to save space. In such a case, the check box can have a third state also −
-
Mixed, meaning a combination of on and off states, denoted by a black dot in the box. This will be displayed to indicate multiple selections in the combo box with check boxes.
-
Insert check boxes in the UserForm as shown below.
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
- Click in the boxes for your selected options.
OptionButton
You can use an option button, also known as the radio button to make a single choice within a limited set of mutually exclusive choices. An option button is usually contained in a group box or a frame.
An option button is represented by a small circle. An option button can have one of the following two states −
- Selected (turned on), denoted by a dot in the circle
- Cleared (turned off), denoted by a blank
Frame
You can use a frame control, also referred to as a group box to group related controls into one visual unit. Typically, option buttons, check boxes or closely related contents are grouped in a frame control.
A frame control is represented by a rectangular object with an optional label.
-
Insert a frame with caption “Choice”.
-
Insert two option buttons with captions “Yes” and “No” in the frame control. The options Yes and No are mutually exclusive.
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
- Click on your selected option.
ToggleButton
You can use a toggle button to indicate a state, such as Yes or No, or a mode, such as on or off. The button alternates between an enabled and a disabled state when it is clicked.
Insert a toggle button on UserForm as shown below −
-
Click the Run tab on the Ribbon.
-
Select Run Sub/UserForm from the dropdown list. The toggle button will be in enabled state by default.
Click the toggle button. The toggle button will be disabled.
If you click the toggle button again, it will be enabled.
CommandButton
You can use a command button to run a macro that performs some actions when the user clicks on it. You have already learnt how to use a command button on a worksheet to run a macro.
Command button is also referred to as a push button. Insert a command button on the UserForm as shown below −
- Right click on the command button.
- Type the following code in the sub Commandbutton1_click ().
ProjectCodes2.DropDown
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
Click the command button. The dropdown list of combo box opens, as it is the action that you have written in the code.
TabStrip
You can insert a tab strip that resembles Excel tabs on the UserForm.
ScrollBar
You can use a scroll bar to scroll through a range of values by clicking on the scroll arrows or by dragging the scroll box.
Insert a scroll bar on the UserForm by drawing it at the required position and adjust the length of the scroll bar.
- Right click on the scroll bar.
- Select View Code from the dropdown list. The Code window opens.
- Add the following line under sub ScrollBar1_Scroll().
TextBox2.Text = "Scrolling Values"
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
Drag the scroll box. The Text – Scrolling Values will be displayed in the text box as you specified it as the action for scroll bar scroll.
MsgBox ()
You can use the MsgBox () function to display a message when you click on something. It can be a guideline or some information or a warning or an error alert.
For example, you can display a message that values are being scrolled when you start scrolling the scroll box.
Message Box Icon Displays
You can use message-box icon displays that portray the specific message. You have the multiple message box icons to suit your purpose −
- Type the following code under ScrollBar1_scroll.
MsgBox "Select Ok or Cancel", vbOKCancel, "OK - Cancel Message" MsgBox "It's an Error!", vbCritical, "Run time result" MsgBox "Why this value", vbQuestion, "Run time result" MsgBox "Value Been for a Long Time", vbInformation, "Run time result" MsgBox "Oh Is it so", vbExclamation, "Run time result"
- Click the Run tab on the Ribbon.
- Select Run Sub/UserForm from the dropdown list.
- Drag the scroll box.
You will get the following message boxes successively.
Designing UserForm
Now, you have an understanding of the different controls that you can use on a UserForm. Select the controls, group them if required and arrange them on the UserForm as per some meaningful sequence. Write the required actions as code corresponding to the respective controls.
Refer to the VBA tutorial in this tutorials library for an example of UserForm.
Excel Macros — Debugging a Code
You have learnt that the macro is stored as VBA code in Excel. You have also learnt that you can directly write code to create a macro in VBA editor. However, as with the case with any code, even the macro code can have defects and the macro may not run as you expected.
This requires examining the code to find the defects and correct them. The term that is used for this activity in software development is debugging.
VBA Debugging
VBA editor allows you to pause the execution of the code and perform any required debug task. Following are some of the debugging tasks that you can do.
- Stepping Through Code
- Using Breakpoints
- Backing Up or Moving Forward in Code
- Not Stepping Through Each Line of Code
- Querying Anything While Stepping Through Code
- Halting the Execution
These are just some of the tasks that you might perform in VBA’s debugging environment.
Stepping Through the Code
The first thing that you have to do for debugging is to step through the code while executing it. If you have an idea of which part of the code is probably producing the defect, you can jump to that line of the code. Otherwise, you can execute the code line by line, backing up or moving forward in the code.
You can step into the code either from Macro dialog box in your workbook or from the VBA editor itself.
Stepping into the code from the workbook
To step into the code from the workbook, do the following −
- Click the VIEW tab on the Ribbon.
- Click Macros.
- Select View Macros from the dropdown list.
The Macro dialog box appears.
- Click the macro name.
- Click the Step into button.
VBA editor opens and the macro code appears in the code window. The first line in the macro code will be highlighted in yellow color.
Stepping into the code from the VBA editor
To step into the code from the VBA editor, do the following −
- Click the DEVELOPER tab on the Ribbon.
- Click Visual Basic. The VBA editor opens.
- Click the module that contains the macro code.
The macro code appears in the code window.
-
Click the Debug tab on the Ribbon.
-
Select Step into from the dropdown list.
The first line in the macro code will be highlighted. The code is in the debugging mode and the options in the Debug dropdown list will become active.
Backing Up or Moving Forward in the Code
You can move forward or backward in the code by selecting Step Over or Step Out.
Not Stepping Through Each Line of Code
You can avoid stepping through each line code, if you identify a potential part of the code that needs to be discussed, by selecting Run to Cursor.
Using Breakpoints
Alternatively, you can set breakpoints at specific lines of code and execute the code, observing the results at each breakpoint. You can toggle a breakpoint and clear all breakpoints if and when required.
Using Watch
You can add a watch while debugging, to evaluate an expression and stop the execution when a variable attains a specific value. This means that you configure a watch expression, which will be monitored until it is true and then the macro will halt and leave you in break mode. VBA provides you with several watch types to select from, in order to accomplish what you are looking for.
Halting the Execution
During debugging, at any point of time, if you have found a clue on what is going wrong, you can halt the execution to decipher further.
If you are an experienced developer, the debugging terminology is familiar to you and VBA editor debugging options make your life simple. Even otherwise, it will not take much time to master this skill if you have learnt VBA and understand the code.
Excel Macros — Configuring a Macro
You can record a macro and save it with the name Auto_Open to run it whenever you open the workbook that contains this macro.
You can also write VBA code for the same purpose with the Open event of the workbook. The Open event runs the code in the sub procedure Workbook_Open () every time you open the workbook.
Recording an Auto_Open Macro
You can record an Auto_Run macro as follows −
- Click the VIEW tab on the Ribbon.
- Click Macros.
- Click Record Macro. The Record Macro dialog box appears.
- Type Auto_Run for the macro name.
- Type a description and click OK.
- Start recording the macro.
- Stop Recording.
- Save the workbook as macro enabled workbook.
- Close the workbook.
- Open the workbook. The macro Auto_Run will run automatically.
If you want Excel to start without running an Auto_Open macro, hold the SHIFT key when you start Excel.
Limitations of Auto_Open Macro
The following are the limitations of Auto_Open macro −
-
If the workbook in which you saved the Auto_Open macro contains code for workbook Open event, the code for the Open event will override the actions in the Auto_Open macro.
-
An Auto_Open macro is ignored when the workbook is opened by running code that uses the Open method.
-
An Auto_Open macro runs before any other workbooks open. Hence, if you record actions that you want Excel to perform on the default Book1 workbook or on a workbook that is loaded from the XLStart folder, the Auto_Open macro will fail when you restart Excel, because the macro runs before the default and startup workbooks open.
If you encounter any of these limitations, instead of recording an Auto_Open macro, you must write a code for the Open event as described in the next section.
VBA Code for Open Event of a Workbook
You can write code that will get executed when you open a workbook. VBA provides you with an event called open that incorporates a VBA procedure for the actions to be done on opening a workbook.
Open the workbook in which you stored the macro that you have written for the absolute references – Report_ProjectXYZ. When this macro is run, a new worksheet will be added in the workbook and the project report structure appears on the new worksheet.
You can write a macro code that will perform these actions when you open the workbook. That means when you open the Project Report workbook, a new worksheet with the report structure will be ready for you to enter the details.
Follow the below given procedure in VBA editor−
-
Double click on ThisWorkbook in Projects Explorer.
-
In the code window, select Workbook in the left dropdown list and Open in the right dropdown list. Sub Workbook_Open () appears.
-
Click Modules in the Projects Explorer.
-
Double click on the module name that contains the macro code.
-
Copy the macro code from the module and paste it in the Sub WorkBook_Open ().
Save the macro-enabled workbook. Open it again. The macro runs and a new worksheet with the report structure is inserted.
В некоторых случаях вам может понадобиться использовать один макрос VBA несколько раз в будущем. Это возможно сохраните как-нибудь модуль VBA в любой новый документ чтобы он был доступен во всех книгах? Ответ положительный. В этом уроке мы познакомим вас с простым способом достижения вашей цели.
Сохраните и используйте код VBA во всех книгах
Сохраните и используйте код VBA во всех книгах
Например, вы хотите использовать код VBA для преобразовать числа в английские слова и сохранить модуль VBA во всех книгах на случай, если вы захотите использовать код VBA в будущем. Пожалуйста, сделайте следующее.
1. нажмите Alt + F11 ключи в Excel, и он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите Вставить > Модули и вставьте следующий макрос в окно модуля.
Код VBA: преобразование чисел в слова
Function NumberstoWords(ByVal MyNumber)
'Update by Extendoffice
Dim xStr As String
Dim xFNum As Integer
Dim xStrPoint
Dim xStrNumber
Dim xPoint As String
Dim xNumber As String
Dim xP() As Variant
Dim xDP
Dim xCnt As Integer
Dim xResult, xT As String
Dim xLen As Integer
On Error Resume Next
xP = Array("", "Thousand ", "Million ", "Billion ", "Trillion ", " ", " ", " ", " ")
xNumber = Trim(Str(MyNumber))
xDP = InStr(xNumber, ".")
xPoint = ""
xStrNumber = ""
If xDP > 0 Then
xPoint = " point "
xStr = Mid(xNumber, xDP + 1)
xStrPoint = Left(xStr, Len(xNumber) - xDP)
For xFNum = 1 To Len(xStrPoint)
xStr = Mid(xStrPoint, xFNum, 1)
xPoint = xPoint & GetDigits(xStr) & " "
Next xFNum
xNumber = Trim(Left(xNumber, xDP - 1))
End If
xCnt = 0
xResult = ""
xT = ""
xLen = 0
xLen = Int(Len(Str(xNumber)) / 3)
If (Len(Str(xNumber)) Mod 3) = 0 Then xLen = xLen - 1
Do While xNumber <> ""
If xLen = xCnt Then
xT = GetHundredsDigits(Right(xNumber, 3), False)
Else
If xCnt = 0 Then
xT = GetHundredsDigits(Right(xNumber, 3), True)
Else
xT = GetHundredsDigits(Right(xNumber, 3), False)
End If
End If
If xT <> "" Then
xResult = xT & xP(xCnt) & xResult
End If
If Len(xNumber) > 3 Then
xNumber = Left(xNumber, Len(xNumber) - 3)
Else
xNumber = ""
End If
xCnt = xCnt + 1
Loop
xResult = xResult & xPoint
NumberstoWords = xResult
End Function
Function GetHundredsDigits(xHDgt, xB As Boolean)
Dim xRStr As String
Dim xStrNum As String
Dim xStr As String
Dim xI As Integer
Dim xBB As Boolean
xStrNum = xHDgt
xRStr = ""
On Error Resume Next
xBB = True
If Val(xStrNum) = 0 Then Exit Function
xStrNum = Right("000" & xStrNum, 3)
xStr = Mid(xStrNum, 1, 1)
If xStr <> "0" Then
xRStr = GetDigits(Mid(xStrNum, 1, 1)) & "Hundred "
Else
If xB Then
xRStr = "and "
xBB = False
Else
xRStr = " "
xBB = False
End If
End If
If Mid(xStrNum, 2, 2) <> "00" Then
xRStr = xRStr & GetTenDigits(Mid(xStrNum, 2, 2), xBB)
End If
GetHundredsDigits = xRStr
End Function
Function GetTenDigits(xTDgt, xB As Boolean)
Dim xStr As String
Dim xI As Integer
Dim xArr_1() As Variant
Dim xArr_2() As Variant
Dim xT As Boolean
xArr_1 = Array("Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen ")
xArr_2 = Array("", "", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety ")
xStr = ""
xT = True
On Error Resume Next
If Val(Left(xTDgt, 1)) = 1 Then
xI = Val(Right(xTDgt, 1))
If xB Then xStr = "and "
xStr = xStr & xArr_1(xI)
Else
xI = Val(Left(xTDgt, 1))
If Val(Left(xTDgt, 1)) > 1 Then
If xB Then xStr = "and "
xStr = xStr & xArr_2(Val(Left(xTDgt, 1)))
xT = False
End If
If xStr = "" Then
If xB Then
xStr = "and "
End If
End If
If Right(xTDgt, 1) <> "0" Then
xStr = xStr & GetDigits(Right(xTDgt, 1))
End If
End If
GetTenDigits = xStr
End Function
Function GetDigits(xDgt)
Dim xStr As String
Dim xArr_1() As Variant
xArr_1 = Array("Zero ", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine ")
xStr = ""
On Error Resume Next
xStr = xArr_1(Val(xDgt))
GetDigits = xStr
End Function
3. Нажмите Сохраните значок в верхнем левом углу ленты или нажмите Ctrl + S для открытия Сохранить как окно.
4. в Сохранить как введите имя книги в поле Имя файла коробка. И выберите Надстройка Excel (*.xlam) вариант в Сохранить как выпадающий список.
5. Затем нажмите Сохраните кнопку, чтобы сохранить книгу с кодом VBA в качестве Надстройка Excel.
6. Вернемся к Excel, закройте пустую книгу, которая была сохранена как надстройка Excel.
7. Откройте новую книгу с данными, которые необходимо преобразовать. Введите формулу = Число слов (A2) в ячейке В2. # ИМЯ? будет возвращено значение ошибки, поскольку код VBA еще не был применен во всех книгах.
8. К Застройщик вкладку нажмите Надстройки Excel в Надстройки группа.
9. Добавить в всплывает диалоговое окно. Щелкните значок Приложения кнопку.
10. Выберите надстройку, которую вы только что сохранили, затем нажмите OK кнопку.
11. Затем Надстройка «Преобразование чисел в слова» настроенный вами вставлен и включен. Нажмите на OK кнопку, чтобы завершить настройку.
12. Теперь при вводе формулы = Число слов (A2) в ячейке B2 и нажмите кнопку Enter ключ, будут возвращены соответствующие английские слова. Перетащите маркер автозаполнения вниз, чтобы получить все результаты.
Заметки:
Если вам нужно запустить код вручную, нет никакого способа найти его из вышеперечисленных шагов. Пожалуйста, не волнуйтесь. Есть два пути запустить код.
- Вы можете добавить код в Быстрая панель инструментов и запускайте код каждый раз, когда на панели инструментов нажимается кнопка кода.
- Вы также можете напрямую нажать Alt + F11 чтобы открыть окно операции с кодом, найдите код и нажмите F5 бежать.
Прочие операции (статьи)
Код VBA для отображения всех надстроек в Excel
В Excel вы можете добавлять или вставлять надстройки для более удобной работы с данными. Как мы знаем, мы можем перейти в окно «Параметры», чтобы просмотреть все надстройки, но есть ли способ перечислить все надстройки на листе? Теперь в этом руководстве он предоставляет код VBA для перечисления всех надстроек в Excel.
Как защитить/заблокировать код VBA в Excel?
Точно так же, как вы можете использовать пароль для защиты книг и рабочих листов, вы также можете установить пароль для защиты макросов в Excel.
Как использовать временную задержку после запуска макроса VBA в Excel?
В некоторых случаях вам может потребоваться установить задержку таймера для запуска макроса VBA в Excel. Например, если щелкнуть для запуска указанного макроса, он вступит в силу через 10 секунд. Эта статья покажет вам способ ее достижения.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы и хранение данных; Разделить содержимое ячеек; Объедините повторяющиеся строки и сумму / среднее значение… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Избранные и быстро вставляйте формулы, Диапазоны, диаграммы и изображения; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Группировка сводной таблицы по номер недели, день недели и другое … Показать разблокированные, заблокированные ячейки разными цветами; Выделите ячейки, у которых есть формула / имя…
Вкладка Office — предоставляет интерфейс с вкладками в Office и значительно упрощает вашу работу
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!