Даже если вы не умеете программировать, то существует множество мест (книги, сайты, форумы), где можно найти готовый код макросов на VBA для огромного количества типовых задач в Excel. По моему опыту, большинство пользователей рано или поздно собирают свою личную коллекцию макросов для автоматизации рутинных процессов, будь то перевод формул в значения, вывод суммы прописью или суммирования ячеек по цвету. И тут встает проблема — код макросов на Visual Basic нужно где-то хранить, чтобы потом использовать в работе.
Самый простой вариант — сохранять код макросов прямо в рабочем файле, зайдя в редактор Visual Basic с помощью сочетания клавиш Alt+F11 и добавив новый пустой модуль через меню Insert — Module:
При таком способе возникает, однако, несколько неудобств:
- Если рабочих файлов много, а макрос нужен везде, как например макрос преобразования формул в значения, то и копировать код придется в каждую книгу.
- Нужно не забыть сохранить файл в формате с поддержкой макросов (xlsm) или в формате двоичной книги (xlsb).
- При открытии такого файла защита от макросов будет каждый раз выдавать предупреждение, которое нужно подтвердить (ну, или отключить защиту полностью, что может быть не всегда желательно).
Более изящным решением будет создание своей собственной надстройки (Excel Add-in) — отдельного файла особого формата (xlam), содержащего все ваши «любимые» макросы. Плюсы такого подхода:
- Достаточно будет один раз подключить надстройку в Excel — и можно будет использовать её VBA процедуры и функции в любом файле на этом компьютере. Пересохранять ваши рабочие файлы в xlsm- и xlsb-форматы, таким образом, не потребуется, т.к. исходный код будет храниться не в них, а в файле надстройки.
- Защита от макросов вас тоже беспокоить уже не будет, т.к. надстройки по определению входят в доверенные источники.
- Можно сделать отдельную вкладку на ленте Excel с красивыми кнопками для запуска макросов надстройки.
- Надстройка — это отдельный файл. Его легко переносить с компьютера на компьютер, делиться им с коллегами или даже продавать
Давайте рассмотрим весь процесс создания своей собственной надстройки для Microsoft Excel по шагам.
Шаг 1. Создаем файл надстройки
Открываем Microsoft Excel с пустой книгой и сохраняем ее под любым подходящим именем (например MyExcelAddin) в формате надстройки с помощью команды Файл — Сохранить как или клавиши F12, указав тип файла Надстройка Excel (Excel Add-in):
Обратите внимание, что стандартно Excel хранит надстройки в папке C:UsersВаше_имяAppDataRoamingMicrosoftAddIns, но, в приниципе, можно указать любую другую удобную вам папку.
Шаг 2. Подключаем созданную надстройку
Теперь созданную нами на прошлом шаге надстройку MyExcelAddin надо подключить к Excel. Для этого идем в меню Файл — Параметры — Надстройки (File — Options — Add-Ins), жмем на кнопку Перейти (Go) в нижней части окна. В открывшемся окне жмем кнопку Обзор (Browse) и указываем положение нашего файла надстройки.
Если вы все сделали правильно, то наша MyExcelAddin должна появиться в списке доступных надстроек:
Шаг 3. Добавляем в надстройку макросы
Наша надстройка подключена к Excel и успешно работает, но в ней нет пока ни одного макроса. Давайте её наполним. Для этого нужно открыть редактор Visual Basic сочетанием клавиш Alt+F11 или кнопкой Visual Basic на вкладке Разработчик (Developer). Если вкладки Разработчик не видно, то её можно отобразить через Файл — Параметры — Настройка ленты (File — Options — Customize Ribbon).
В левом верхнем углу редактора должно быть окно Project (если его не видно, то включите его через меню View — Project Explorer):
В этом окне отображаются все открытые книги и запущенные надстройки Microsoft Excel, в том числе и наша VBAProject (MyExcelAddin.xlam) Выделите её мышью и добавьте в неё новый модуль через меню Insert — Module. В этом модуле мы и будем хранить VBA-код наших макросов надстройки.
Код можно либо набрать «с нуля» (если вы умеете программировать), либо скопировать откуда-нибудь уже готовый (что гораздо проще). Давайте, для пробы, введем в добавленный пустой модуль код простого, но полезного макроса:
После набора кода не забудьте нажать на кнопку сохранения (дискетку) в левом верхнем углу.
Наш макрос FormulasToValues, как легко сообразить, преобразует формулы в значения в выделенном предварительно диапазоне. Иногда такие макросы называют еще процедурами. Чтобы его запустить, нужно выделить ячейки с формулами и открыть специальное диалоговое окно Макросы с вкладки Разработчик (Developer — Macros) или сочетанием клавиш Alt+F8. Обычно в этом окне отображаются доступные макросы из всех открытых книг, но макросы надстроек здесь не видны. Несмотря на это, мы можем ввести имя нашей процедуры в поле Имя макроса (Macro name), а затем нажать кнопку Выполнить (Run) — и наш макрос заработает:
Здесь же можно назначить сочетание клавиш для быстрого запуска макроса — за это отвечает кнопка Параметры (Options) в предыдущем окне Макрос:
При назначении клавиш имейте ввиду, что здесь учитывается регистр и раскладка клавиатуры. Поэтому, если вы назначите сочетание, например, Ctrl+Й, то, по факту, вам придется в будущем следить за тем, чтобы у вас была включена именно русская раскладка и жать дополнительно Shift, чтобы получить заглавную букву.
Для удобства можно добавить и кнопку для нашего макроса на панель быстрого доступа в левом верхнем углу окна. Для этого выберите Файл — Параметры — Панель быстрого доступа (File — Options — Customize Quick Access Toolbar), а затем в выпадающем списке в верхней части окна опцию Макросы. После этого наш макрос FormulasToValues можно поместить на панель кнопкой Добавить (Add) и выбрать для него значок кнопкой Изменить (Edit):
Шаг 4. Добавляем в надстройку функции
Кроме макросов-процедур, существуют еще и макросы-функции или как их еще называют UDF (User Defined Function = пользовательская функция). Давайте создадим в нашей надстройке отдельный модуль (команда меню Insert — Module) и вставим туда код такой функции:
Несложно сообразить, что эта функция нужна для извлечения НДС из суммы включающей НДС. Не бином Ньютона, конечно, но нам для примера сгодится, чтобы показать основные принципы.
Заметьте, что синтаксис функции отличается от процедуры:
- используется конструкция Function …. End Function вместо Sub … End Sub
- после названия функции в скобках указываются её аргументы
- в теле функции производятся необходимые вычисления и затем результат присваивается переменной с названием функции
Также обратите внимание, что эту функцию не нужно, да и невозможно запустить как предыдущий макрос-процедуру через диалоговое окно Макросы и кнопку Выполнить. Такую макрофункцию нужно использовать как стандартную функцию листа (СУММ, ЕСЛИ, ВПР…), т.е. просто ввести в любую ячейку, указав в качестве аргумента значение суммы с НДС:
… или ввести через стандартное диалоговое окно вставки функции (кнопка fx в строке формул), выбрав категорию Определенные пользователем (User Defined):
Единственный неприятный момент здесь — это отсутствие привычного описания функции в нижней части окна. Чтобы его добавить придется проделать следующие действия:
- Откройте редактор Visual Basic сочетанием клавиш Alt+F11
- Выделите надстройку в панели Project и нажмите клавишу F2, чтобы открыть окно Object Browser
- Выберите в верхней части окна в выпадающем списке свой проект надстройки
- Щелкните по появившейся функции правой кнопкой мыши и выберите команду Properties.
- Введите описание функции в окно Description
- Сохраните файл надстройки и перезапустите Excel.
После перезапуска у функции должно отобразиться описание, которое мы ввели:
Шаг 5. Создаем вкладку надстройки в интерфейсе
Финальным, хоть и не обязательным, но приятным штрихом будет создание отдельной вкладки с кнопкой запуска нашего макроса, которая будет появляться в интерфейсе Excel после подключения нашей надстройки.
Информация об отображаемых вкладках по умолчанию содержится внутри книги и должна быть оформлена в виде специального XML-кода. Проще всего писать и редактировать такой код с помощью специальных программ — XML-редакторов. Одна из самых удобных (и бесплатных) — это программа Максима Новикова Ribbon XML Editor.
Алгоритм работы с ней следующий:
- Закройте все окна Excel, чтобы не было конфликта файлов, когда мы будем редактировать XML-код надстройки.
- Запустите программу Ribbon XML Editor и откройте в ней наш файл MyExcelAddin.xlam
- При помощи кнопки tabs в левом верхнем углу добавьте заготовку кода для новой вкладки:
- В пустые кавычки нужно вписать id нашей вкладки и группы (любые уникальные идентификаторы), а в label — названия нашей вкладки и группы кнопок на ней:
- При помощи кнопки button на панели слева добавляем заготовку кода для кнопки и дописываем к ней теги:
— label — это текст на кнопке
— imageMso — это условное название изображения на кнопке. Я использовал иконку с красной кнопкой, которая имеет название AnimationCustomAddExitDialog. Названия всех доступных кнопок (а их несколько сотен!) можно найти на большом количестве сайтов в интернете, если искать по ключевым словам «imageMso». Для начала можно сходить сюда.
— onAction — это имя процедуры обратного вызова — специального короткого макроса, который будет запускать наш основной макрос FormulasToValues. Назвать эту процедуру можно как угодно. Мы добавим её чуть позже. - Проверить правильность всего сделанного можно с помощью кнопки с зеленой галочкой сверху на панели инструментов. Там же рядом нажмите на кнопку с дискетой для сохранения всех изменений.
- Закрываем Ribbon XML Editor
- Открываем Excel, заходим в редактор Visual Basic и добавляем к нашему макросу процедуру обратного вызова KillFormulas, чтобы она запускала наш основной макрос замены формул на значения.
- Сохраняем внесенные изменения и, вернувшись в Excel проверяем результат:
Вот и всё — надстройка готова к использованию. Наполните её своими процедурами и функциями, добавьте красивые кнопки — и использовать макросы в работе станет намного проще.
Ссылки по теме
- Что такое макросы, как их использовать в работе, где взять код макросов на Visual Basic.
- Как сделать заставку при открытии книги в Excel
- Что такое Личная Книга Макросов и как её использовать
Надстройки Excel: обзор, особенности и требования
Смотрите также (и бесплатных) - код такой функции: в левом верхнем сохраняем ее под
Расширение надстроек
свою личную коллекцию закройте все открытыеНажмите кнопку автоматизации, VBA и разработчики могут добавлять и нажмите кнопку установке.не появляется, нужноИщете информацию о надстроекПри вводе формул показываются добавлением даты и функции, предоставляемые предыдущейНадстройки Excel позволяют задействовать это программа МаксимаНесложно сообразить, что эта
Типы надстроек
углу. любым подходящим именем
-
макросов для автоматизации
-
рабочие книги сноваМагазин XLL. Чтобы их и удалять надстройкиУдалитьДеактивация надстройки Excel перезапустить Excel. Office на основе стрелки, отображающие зависимости. времени создания резервной
-
надстройкой.
Установка
какие-то новые возможности Новикова Ribbon XML функция нужна дляНаш макрос (например рутинных процессов, будь запустите программу Excel.. можно было использовать, автоматизации перед разработкой. Другие надстройки, такие как HTML, CSS и Книгу и диапазон копии.«Мастер суммирования». Эта надстройка
и свойства, которые Editor. извлечения НДС изFormulasToValues
Загрузка и выгрузка
MyExcelAddin то перевод формулВыберите инструмент: «ФАЙЛ»-«Параметры»-«Надстройки». ВнизуИспользуйте поля их нужно установить. программ установки иСледуйте инструкциям программы установки.На вкладке вкладка JS? Если вы ячеек можно очиститьТакже, используя в работе
«Сумма» в Excel, не присущи поАлгоритм работы с ней суммы включающей НДС., как легко сообразить,) в формате надстройки в значения, вывод из выпадающего спискаКатегорияПосле установки надстройки или удаления данных надстроек.Важно:ФайлНачало работы являетесь, читайте в от лишнего в данную надстройку, можно которая автоматически суммирует умолчанию данной программе. следующий: Не бином Ньютона,
Стандартные надстройки, идущие вместе с электронными таблицами
преобразует формулы в с помощью команды
- суммы прописью или «Управление:» укажите наили ее активации соответствующие Пользователям эта процедура С помощью этой процедурывыберите команду, доступны в Excel статье Начало Office
- любой момент времени. получить курс одной те значения, которыеФайлы, содержащие подобные дополнения,
- Закройте все окна Excel, конечно, но нам значения в выделенномФайл — Сохранить как суммирования ячеек по опцию «Надстройки Excel»Поиск
- команды становятся доступны не потребуется. Инструкции разработчики могут добавлятьПараметры
- в других местах, надстройки для Excel.Plex позволяет менять местами из 17 валют определены в условии. имеют расширение xla чтобы не было
- для примера сгодится, предварительно диапазоне. Иногдаили клавиши F12, цвету. И тут и нажмите на, чтобы найти надстройки. в одном из по установке и и удалять надстройки
- , а затем — например в видеWindows macOS столбцы и строки, с учетом ставки С 2010-й версии в версиях до конфликта файлов, когда чтобы показать основные
Надстройка VBA-Excel
такие макросы называют указав тип файла встает проблема - кнопку «Перейти».Нажмите кнопку указанных ниже мест. удалению надстройки можно автоматизации перед разработкой категорию вкладки на ленте,Некоторые надстройки, такие как строить мини-гистограммы. Данная рефинансирования на любую не поддерживается. 2007 или xlam, мы будем редактировать принципы. ещеНадстройка Excel (Excel Add-in) код макросов наВ появившемся диалоговом окнеДобавитьВкладка получить у системного программ установки иНадстройки или через макросы «Пакет анализа» и надстройка позволяет осуществлять
прошедшую дату. Данные«Пересчет в евро» вызывает начиная с него XML-код надстройки.Заметьте, что синтаксис функциипроцедурами: Visual Basic нужно «Надстройки» нажмите надля установки надстройки.Данные администратора, который предоставил удаления данных надстроек.. или пользовательские меню. «Поиск решения», встроены
Plex
почтовую рассылку по берутся автоматически с функцию EUROCONVERT, которая соответственно. В данныйЗапустите программу Ribbon XML отличается от процедуры:. Чтобы его запустить,Обратите внимание, что стандартно где-то хранить, чтобы кнопку «Обзор», аПримечание:
. После установки и эту надстройку. Пользователям эта процедураВ поле
Важно: в Excel. Другие различным электронным адресам. Центробанков России, Украины осуществляет пересчет введенных формат можно сохранять
Editor и откройтеиспользуется конструкция нужно выделить ячейки Excel хранит надстройки потом использовать в после найдите и Некоторые надстройки необходимо приобрести. активации надстроек «ПакетНа вкладке не потребуется. Инструкции
Управление С помощью этой процедуры доступны в Центре Большие таблицы могут или Беларуси. сумм в евро. и собственные файлы, в ней нашFunction …. End Function с формулами и
в папке C:UsersВаше_имяAppDataRoamingMicrosoftAddIns, работе. найдите свое название,Удаление надстройки Excel анализа» и «ПоискФайл по установке ивыберите пункт разработчики могут добавлять загрузки, и их быть распределены наНадстройка позволяет генерировать в«Помощник по Интернету» - которые будут использоваться файл MyExcelAddin.xlam
вместо открыть специальное диалоговое но, в приниципе,
Самый простой вариант - на против него решения» на вкладкевыберите команду удалению надстройки можноНадстройки Excel и удалять надстройки необходимо предварительно скачать
несколько страниц по выделенный диапазон ячеек дает возможность программистам как надстройки Excel.При помощи кнопкиSub … End Sub окно можно указать любую
сохранять код макросов поставьте галочки иОткройте вкладкуДанныеПараметры получить у системного, а затем нажмите автоматизации перед разработкой и установить. Кроме заданным условиям. Внешние случайные числа, которые размещать данные электронных Для этого приtabsпосле названия функции вМакросы другую удобную вам
прямо в рабочем нажмите на кнопкуВставкаленты становятся доступны, а затем — администратора, который предоставил кнопку
программ установки и того, некоторые надстройки связи книги могут могут быть как таблиц от Microsoft сохранении книги необходимов левом верхнем скобках указываются еёс вкладки
папку. файле, зайдя в «Ок». Если выи выберите команду команды категорию
эту надстройку.Перейти удаления данных надстроек. создаются сторонними организациями,
быть разорваны или дробными, так и в Глобальной сети в диалоговом окне углу добавьте заготовку аргументы
Разработчик (Developer — Macros)Теперь созданную нами на редактор Visual Basic не находите названияМои надстройкиАнализ данныхНадстройкиДобавление надстройки COM.Активация надстройки Excel например поставщиками программных открыты. Некоторые листы целыми, повторяющимися и при использовании синтаксиса «Сохранить» выбрать «Тип кода для новойв теле функции производятсяили сочетанием клавиш прошлом шаге надстройку с помощью сочетания нажмите на кнопку.и.
На вкладкеВ поле решений или программистами.
из различных файлов неповторяющимися, в числовом рассматриваемой надстройки. файла» xlam.
Макрос «Сумма прописью»
вкладки: необходимые вычисления и Alt+F8. Обычно вMyExcelAddin клавиш Alt+F11 и «Обзор», чтобы указатьВ окнеПоиск решенияВ полеФайлДоступные надстройкиНа вкладке Это могут быть могут быть скопированы
формате или в«Мастер подстановок». Данный макросНадстройки Excel можно подразделитьВ пустые кавычки нужно затем результат присваивается этом окне отображаютсянадо подключить к
В заключение
добавив новый пустой путь к вашемуНадстройки Office.Управлениевыберите командуснимите флажок тойФайл надстройки модели COM, в один. В формате даты и позволяет создать формулу, на три типа:
вписать
fb.ru
Добавление и удаление надстроек в Excel
переменной с названием доступные макросы из Excel. Для этого модуль через меню файлу с надстройкой.щелкните 3 точкиВкладкавыберите пунктПараметры надстройки, которую нужновыберите команду надстройки Visual Basic ячейке можно создать времени. с помощью которойсамой программы;id функции всех открытых книг, идем в менюInsert — Module
Надстройка VBA готова! Теперь рядом с надстройкой.ГлавнаяНадстройки Excel, а затем — деактивировать, а затемПараметры для приложений (VBA)
выпадающий список. PlexИспользуя данный набор макросов, осуществляется поиск данныхCOM-надстройки (для модели компонентныхнашей вкладки иТакже обратите внимание, что но макросы надстроек
Файл — Параметры -
Общие сведения о надстройках
: во всех открытыхВыберите команду. Другие надстройки можно, а затем нажмите категорию нажмите кнопку, а затем — и надстройки DLL. позволяет сортировать строки можно создавать Динамический в некотором списке объектов) — за группы (любые уникальные эту функцию не здесь не видны. Надстройки (File -При таком способе возникает, рабочих книгах можно
Удалить добавить на вкладку кнопку
-
НадстройкиОК категорию Они также требуют по цвету заливки Именованный Диапазон. Он по иному значению счет этих файлов идентификаторы), а в нужно, да и Несмотря на это, Options — Add-Ins) однако, несколько неудобств: будет воспользоваться макросами.ГлавнаяПерейти
-
..Надстройки установки. или в случайном по образу и
-
из этого списка. увеличиваются возможности рассматриваемогоlabel невозможно запустить как мы можем ввести, жмем на кнопкуЕсли рабочих файлов много, из вашего *.xla
Ознакомьтесь с предупреждением относительно..В полеВо многих случаях деактивация
-
.Большинство надстроек можно разделить порядке. Листы книги подобию таблиц в С 2010-й версии приложения из-за появления- названия нашей предыдущий макрос-процедуру через имя нашей процедурыПерейти (Go) а макрос нужен файла. Чтобы убедиться
-
других устройств иДругие надстройки, такие какОткроется диалоговое окноУправление надстройки приводит кВ поле на три типа, можно сохранять отдельными Word сжимается и не поддерживается. новых функций и вкладки и группы
-
диалоговое окно в полев нижней части везде, как например в этом снова щелкните вкладкаНадстройкищелкните ее удалению сУправление описанных ниже. файлами. расширяется при вводе
«Поиск решения» — осуществляет команд, которые разработаны кнопок на ней:МакросыИмя макроса (Macro name) окна. В открывшемся макрос преобразования формул откройте редактор VisualУдалить
Добавление или удаление надстройки Excel
Начало работы.Надстройки COM ленты. В другихвыберите пунктНадстройки Excel.Помимо этого, можно осуществлять
данных. Помимо того то, что задано
-
определенными пользователями, ониПри помощи кнопкии кнопку, а затем нажать окне жмем кнопку в значения, то Basic (ALT+F11)..
-
, доступны в ExcelЧтобы установить надстройку автоматизации,, а затем нажмите случаях для удаленияНадстройки Excel Обычно к этому типу сравнение диапазонов, копирование что данный диапазон
в ее названии, имеют расширения exebutton
-
Выполнить кнопкуОбзор (Browse) и копировать кодКак видно ее теперьНадстройки Excel – это в других местах, в поле
кнопку надстройки с ленты, а затем нажмите относят файлы надстроек формул без сдвига может использоваться в
по сценариям, под или dll;
-
на панели слева. Такую макрофункцию нужноВыполнить (Run)и указываем положение придется всегда можно найти прекрасная альтернатива создания например в видеДоступные серверы автоматизацииПерейти может потребоваться перезапустить кнопку Excel (XLAM), Excel диапазона. повседневной работе Excel, которыми понимают входные
-
автоматизации. добавляем заготовку кода использовать как стандартную- и наш нашего файла надстройки.в каждую книгу в списке проектов макросов доступных для вкладки на ленте,выберите пункт.
-
Excel.Перейти 97–2003 (XLA) иЗдесь перечислены только основные с его помощью значения, подставляемые вСтандартный набор получают вместе для кнопки и функцию листа (СУММ, макрос заработает:
-
Если вы все сделали. и использовать все использования любых других или через макросыАвтоматизацияОткроется диалоговое окноПримечание.. надстроек DLL (XLL), возможности этой надстройки,
можно создавать динамические Excel. Решения подбираются
-
с программой Excel. дописываем к ней ЕСЛИ, ВПР…), т.е.Здесь же можно правильно, то нашаНужно не забыть ее макросы в файлов рабочих книг.
-
или пользовательские меню.и щелкните нужнуюНадстройки COM При деактивации надстройки онаОткроется диалоговое окно а также надстройки а их гораздо диаграммы и сводные
-
«что-если», анализируя ячейки Дополнительные надстройки могут теги: просто ввести в назначить сочетание клавишMyExcelAddinсохранить файл в формате любых других файлах.
Если Вам понравитьсяВажно: надстройку.. не удаляется сНадстройки автоматизации. Некоторые надстройки больше.
таблицы. перебора и ограничений. быть получены с- label любую ячейку, указав для быстрого запуска
должна появиться в с поддержкой макросов
создавать свои надстройки С помощью этой процедурыСоветВ поле компьютера. Чтобы удалить. Excel, такие какПри заполнении квитанций воНа любую команду можноКак и после загрузки сайта офисных продуктов- это текст в качестве аргумента макроса — за списке доступных надстроек:(xlsm) или вЧтобы отключить вашу надстройку и вы войдете разработчики могут добавлять Если нужной надстройки нетДоступные надстройки
-
ее, необходимо воспользоватьсяВ поле «Пакет анализа» и многих случаях нужно назначить свои горячие
-
любого другого набора корпорации Microsoft. Перед на кнопке значение суммы с это отвечает кнопкаНаша надстройка подключена к формате двоичной книги снова откройте окно
-
во вкус, то и удалять надстройки
-
в списке, нажмитеустановите флажок для средством установки/удаления программ.Доступные надстройки «Поиск решения», становятся проставить сумму не клавиши. макросов, на ленте загрузкой в электронные- imageMso
-
НДС:Параметры (Options) Excel и успешно (xlsb). «ФАЙЛ»-«Параметры»-«Надстройки»-«Перейти» и снимите это полезное и автоматизации перед разработкой кнопку
-
той надстройки, которуюУдаление надстройки Excelустановите флажок той доступны после установки только цифрами, ноЭта надстройка имеет полезное или в меню
-
-
таблицы данные расширяющие
Добавление или удаление надстройки COM
- это условное… или ввести черезв предыдущем окне работает, но вПри открытии такого файла соответственную галочку в интересное занятие может программ установки иОбзор необходимо установить, и надстройки, которую необходимо Microsoft Office или и прописью. Есть
свойство по добавлению
-
электронных таблиц появятся приложения необходимо установить. название изображения на стандартное диалоговое окноМакрос ней нет показащита от макросов появившемся диалоговом окне.
-
еще для вас удаления данных надстроек., найдите нужную нажмите кнопкуВажно: активировать, а затем Excel. Для использования дополнительная надстройка MS
функций данного набора новые команды или Они могут быть
-
кнопке. Я использовал вставки функции (кнопка: ни одного макроса.будет каждый раз Для полного удаления приносить неплохой доход.Для активации предварительно установленной
надстройку, а затемОК Если надстройка Excel была нажмите кнопку этих надстроек в Excel, которая позволяет макросов в книгу, табы. С помощью
установлены в каталог
-
иконку с краснойfxПри назначении клавиш имейте Давайте её наполним. выдавать предупреждение, которое надстройки придется удалить Надстройки можно публиковать надстройки Excel
-
нажмите кнопку. установлена с сетевогоОК большинстве случаев нужно осуществлять последнее действие. после чего их этой надстройки в
(папку) Library или кнопкой, которая имеетв строке формул),
-
ввиду, что здесь Для этого нужно нужно подтвердить (ну, ее файл *.xla и продавать в ОКСовет.
файлового сервера или. лишь активировать их. При необходимости ее можно будет использовать Excel добавляются новые одно из его название AnimationCustomAddExitDialog. Названия
-
выбрав категорию учитывается регистр и открыть редактор Visual или отключить защиту из папки C:Documents магазине Office Store.В меню. Если нужная надстройка отсутствует из общей папки,
Добавление или удаление надстройки автоматизации
Если в окнеСкачиваемые надстройки. автоматической загрузки необходимо на тех компьютерах, функции, команды, что вложений, расположенных по всех доступных кнопокОпределенные пользователем (User Defined) раскладка клавиатуры. Поэтому, Basic сочетанием клавиш полностью, что может and SettingsUser_Name AppDataRoamingMicrosoftAddIns. В данном примереСервис
-
Чтобы удалить надстройку автоматизации, в поле удалять ее, возможно,Доступные надстройки Дополнительные надстройки для Excel разместить скачанный файл где Plex не характерно и для
-
пути установки MS (а их несколько: если вы назначите Alt+F11 или кнопкой быть не всегдаВнимание! В данном примере мы покажем, как
выберите ее нужно удалитьСписок надстроек
-
потребуется там же.не удается найти можно скачать и sumprop.xls в папку устанавливался. других подобных макросов, Office или в
сотен!) можно найтиЕдинственный неприятный момент здесь сочетание, например, Ctrl+Й,Visual Basic желательно). мы использовали формат создать свою достройкуНадстройки из реестра. За, нажмите кнопку
-
Если надстройка Excel надстройку, которую требуется установить со страницы XLStart, находящуюся вИспользование данной надстройки позволяет
Общие сведения о надстройках
но, помимо этого, папке пользователяApplication DataMicrosoftAddIns. на большом количестве — это отсутствие то, по факту,на вкладкеБолее изящным решением будет рабочей книги для с макросом, написанным. дополнительными сведениями обратитесьДобавить была установлена с активировать, возможно, ее Загрузки на сайте папке установки программы. извлекать уникальные элементы использование данного мини-приложенияПомимо этого, надстройки Excel
сайтов в интернете, привычного описания функции вам придется в
-
Разработчик (Developer) создание сохранения файла в на коде самогоВ поле к системному администратору., а затем найдите компакт-диска, а после требуется установить. Office.com.Надстройка «Сумма прописью» в из некоторого списка уменьшит затраты времени могут быть установлены если искать по в нижней части будущем следить за
-
. Если вкладкисвоей собственной надстройки (Excel формате «Надстройка 97-2003». простого и весьмаДоступные надстройкиНекоторые надстройки, такие как
-
надстройку. установки буква дискаУстановка надстройки ExcelПользовательские надстройки Excel позволяет вводить по заданной колонке. на выполнение однотипных по иным путям,
ключевым словам «imageMso». окна. Чтобы его тем, чтобы уРазработчик Add-in)
-
Это позволяет использовать востребованного языка программированияустановите флажок той «Пакет анализа» иУдаление надстройки COM для дисковода компакт-дисков Многие разработчики и поставщики прописью как денежные Извлекаемые элементы могут действий, автоматизировав данный определенным Администратором. Для начала можно
-
добавить придется проделать вас была включенане видно, то- отдельного файла ее в разных VBA (Visual Basic
надстройки, которую необходимо «Поиск решения», встроеныНа вкладке была изменена, следуетЧтобы установить надстройку, которая решений создают пользовательские суммы при использовании быть выделены или вид работы. Данную
Добавление или удаление надстройки Excel
Загрузка осуществляется после установки сходить сюда. следующие действия: именно русская раскладка её можно отобразить особого формата (xlam), версиях Excel. Например,
for Applications). активировать, а затем в Excel. Другие
-
Файл выполнить повторную установку обычно устанавливается вместе надстройки COM, надстройки функции «СуммаПрописью», так
-
из них можно надстройку нельзя назвать надстройки. После совершения-Откройте редактор Visual Basic и жать дополнительно через содержащего все ваши
файлы, сохраненные вЧтобы создать, добавить и
-
нажмите кнопку доступны в Центревыберите команду надстройки с компакт-диска. с Excel, например автоматизации, VBA и и обычные числа сформировать новый список. просто макросом, это данной операции всеonAction сочетанием клавиш Alt+F11
-
Shift, чтобы получитьФайл — Параметры - «любимые» макросы. Плюсы формате *.xlam не включить свою надстройкуОК загрузки, и ихПараметры При запуске надстроек «Пакет анализа» или
-
XLL. Чтобы их при использовании «ЧислоПрописью».Помимо этого, можно менять комплекс последних, что предоставляемые данным набором- это имяВыделите надстройку в панели заглавную букву. Настройка ленты (File такого подхода: может быть использована с макросом, следует:. необходимо предварительно скачать
, а затем —
-
Excel с компакт-диска «Поиск решения», запустите можно было использовать,
-
Существуют различные надстройки для размер диапазона ячеек, и называется набором.
-
макросов возможности становятся процедуры обратного вызова Project и нажмитеДля удобства можно добавить — Options -
-
Достаточно будет в версии 2007Создайте новую рабочую книгу:
Установка надстройки Excel и установить. Кроме
-
категорию необходимо сначала удалить
-
программу установки Excel их нужно установить. Microsoft Excel. Их тип ссылок в В состав программы
-
доступными в электронных — специального короткого клавишу F2, чтобы и кнопку для
-
Customize Ribbon)один раз подключить надстройку и старше. Поэтому
-
«ФАЙЛ»-«Создать»-«Пустая книга». Или того, некоторые надстройкиНадстройки их с компьютера,
support.office.com
Как создать и добавить надстройку в Excel с кодом VBA
или Microsoft OfficeПосле установки надстройки или назначение состоит в формулах, применять в входит более 25 таблицах. Они добавляются макроса, который будет открыть окно Object нашего макроса на.в Excel - лучше воспользоваться старым нажмите комбинацию горячихНекоторые надстройки Excel хранятся создаются сторонними организациями,. а затем выполнить и выберите вариант ее активации соответствующие облегчении проведения различных работе различные инструменты, макросов и 80 в соответствующие меню запускать наш основной Browser
Как сделать и установить надстройку в Excel
панель быстрого доступаВ левом верхнем углу и можно будет
- форматом файлов надстройке клавиш CTRL+N. на компьютере. Чтобы например поставщиками программных
- В поле повторную установку с
- Изменить команды становятся доступны
- операций в данной позволяющие ускорить работу функций, среди которых вместе с теми
макрос
Выберите в верхней части в левом верхнем
редактора должно быть использовать её VBA
*.xla.
Откройте редактор макросов: «РАЗРАБОТЧИК»-«Код»-«Visual
установить или активировать решений или программистами.Управление компакт-диска.
, а затем выберите - в одном из программе, добавлении отсутствующих со сводными таблицами. есть такие, как командами, которые вложеныFormulasToValues окна в выпадающем углу окна. Для окно процедуры и функцииЧитайте также: скачать VBA Basic». их, нажмите кнопку Это могут бытьщелкнитеОткройте вкладку
- требуемую надстройку. После указанных ниже мест. функций, сокращении затрат Plex имеет встроенный ДАТАИЗСТРОКИ, ФАМИЛИЯ и
- в коде данной. Назвать эту процедуру списке свой проект этого выберитеProject в любом файле
- код программы надстройкиВставьте новый модуль выбравОбзор надстройки модели COM,Надстройки COMФайл перезапуска Excel онаВкладка времени на выполнение календарь, с помощью другие. надстройки Excel. можно как угодно. надстройки
Файл — Параметры -(если его не на этом компьютере. сумма прописью с инструмент: «Insert»-«Module».(в диалоговом окне надстройки Visual Basic, а затем нажмитеи выберите пункт
должна появиться вДанные рутинных действий. В которого можно осуществитьУстановка осуществляется включением вПри слишком большом количестве
Мы добавим её
Как удалить надстройку в Excel
Щелкните по появившейся функции Панель быстрого доступа видно, то включите Пересохранять ваши рабочие копейками на русском,В окне модуля введитеНадстройки для приложений (VBA) кнопкуВыход
Полезные советы по надстройкам
поле. После установки и данной статье рассмотрены мгновенный ввод даты параметрах макросов, а загруженных макросов может чуть позже. правой кнопкой мыши (File — Options его через меню файлы в xlsm- украинском и английском свой код макроса., упомянутом выше), найдите и надстройки DLL.Перейти
.Доступные надстройки активации надстроек «Пакет лишь некоторые надстройки. в ячейку, конвертер также постановкой галочки снизиться производительность работыПроверить правильность всего сделанного
и выберите команду — Customize QuickView — Project Explorer и xlsb-форматы, таким языке. Или перевод Возьмем простейший пример надстройку, а затем Они также требуют.Выберите в панели управления. анализа» и «Поиск На самом деле формул в значения, напротив пункта «Доверять компьютера из-за перегрузки можно с помощью
exceltable.com
Как создать свою надстройку для Microsoft Excel
Properties Access Toolbar)): образом, не потребуется, числа в текст макроса: нажмите кнопку установки.Откроется диалоговое окно пунктНекоторые надстройки Excel хранятся решения» в группе их множество. что можно осуществить доступ к объектной памяти. Поэтому те кнопки с зеленой., а затем вВ этом окне отображаются т.к. исходный код средствами Excel.Sub MyMakros()ОКБольшинство надстроек можно разделитьНадстройки COM
Программы и компоненты на компьютере. ЧтобыАнализАвтор: Александр Сорокин как во всей модели проектов VBA». надстройки, которые не галочкой сверху наВведите описание функции в выпадающем списке в все открытые книги
будет храниться неПримечание. Если вы хотите
- Dim polzovatel As. на три типа,.(для Windows 7 установить или активироватьстановятся доступны командыПримечание: книге, так и
- Загрузка производится таким используются или применяются панели инструментов. Там окно верхней части окна и запущенные надстройки
- в них, а защитить паролем доступ StringНекоторые надстройки Excel требуют описанных ниже.В поле и Windows Vista) их, нажмите кнопкуАнализ данных
Мы стараемся как можно в выделенном фрагменте. же образом, как редко, необходимо выгружать. же рядом нажмитеDescription опцию Microsoft Excel, в в файле надстройки.
- к своим исходнымDim data_segodnya As запуска пакета установки.Надстройки Excel.Список надстроек илиОбзори оперативнее обеспечивать васДанная надстройка снабжена менеджером и других надстроек. Выгрузка удаляет команды на кнопку сСохраните файл надстройкиМакросы том числе и
- Защита кодам макросов, тогда Date В этом случае Обычно к этому типуснимите флажок тойУстановка и удаление программ
- (в диалоговом окнеПоиск решения актуальными справочными материалами листов, что позволяет Во время загрузки и возможность запуска
- дискетой для сохраненияи перезапустите Excel. После этого наш нашаот макросов вас выберите инструмент вpolzovatel = Application.UserName
может потребоваться загрузить относят файлы надстроек надстройки, которую нужно(для Windows XP).
Шаг 1. Создаем файл надстройки
Надстройки. на вашем языке. скрывать и показывать появится окно регистрации, набора макросов в всех изменений.. макросVBAProject ( тоже беспокоить уже редакторе Visual Basic:data_segodnya = Now
или скопировать пакет Excel (XLAM), Excel удалить, а затемВыполните одно из следующих), найдите надстройку, аВкладка Эта страница переведена
Шаг 2. Подключаем созданную надстройку
листы, сортировать и которое можно заполнить электронных таблицах, ноЗакрываем Ribbon XML EditorПосле перезапуска у функцииFormulasToValuesMyExcelAddin.xlam) не будет, т.к. «Tools»-«VBAProject Properties». НаMsgBox «Макрос запустил установки на компьютер 97–2003 (XLA) и нажмите кнопку действий: затем нажмите кнопкуФормулы автоматически, поэтому ее
защищать их, а любыми данными, и не деинсталлирует самуОткрываем Excel, заходим в должно отобразиться описание,
Шаг 3. Добавляем в надстройку макросы
можно поместить наВыделите её мышью надстройки по определению закладке «Protection» в пользователь: » & (обычно пакеты установки надстроек DLL (XLL),ОКЕсли приложение Excel былоОК. После установки текст может содержать также осуществлять с лучше отметить «Я надстройку по пути редактор Visual Basic которое мы ввели: панель кнопкой и добавьте в входят в доверенные поле ввода «Password:» polzovatel & vbNewLine имеют расширение MSI),
а также надстройки. установлено в составе. и активации инструментов неточности и грамматические ними иные действия. гуру Excel, мне установки, поэтому при
и добавляем кФинальным, хоть и неДобавить (Add) неё новый модуль источники. введите пароль для & data_segodnya а затем запустить автоматизации. Некоторые надстройкиПримечание пакета Microsoft Office,Некоторые надстройки Excel требуют для евро в ошибки. Для насС ее помощью можно это не интересно». необходимости она может
нашему макросу процедуру обязательным, но приятными выбрать для через менюМожно сделать защиты доступу кEnd Sub его. Excel, такие как В результате надстройка будет
в списке установленных запуска пакета установки. группе важно, чтобы эта округлять числа, переставлять
Надстройка Excel Plex позволяет быть загружена снова. обратного вызова штрихом будет создание него значок кнопкойInsert — Moduleотдельную вкладку макросам проекта рабочейЗакройте окно редактора макросовДругие надстройки, отсутствующие на «Пакет анализа» и удалена из памяти, программ выберите пункт В этом случаеРешения статья была вам значения в обратном осуществлять ввод сложных После выгрузки доступностьKillFormulas отдельной вкладки сИзменить (Edit). В этом модулена ленте Excel книги. В поле и выберите инструмент: компьютере, можно скачать «Поиск решения», становятся но ее имяMicrosoft Office может потребоваться загрузитьстановятся доступны команды полезна. Просим вас порядке с автоматической
формул. Введя ее набора макросов остается, чтобы она запускала кнопкой запуска нашего: мы и будем с красивыми кнопками ввода «Confirm password:» «ФАЙЛ»-«Сохранить как» (CTRL+S).
и установить с доступны после установки останется в списке, а затем нажмите или скопировать пакетПересчет в евро уделить пару секунд заменой формул. При один раз, данную до момента перезапуска наш основной макрос макроса, которая будетКроме хранить VBA-код наших для запуска макросов
введите пароль повторено В поле «Имя помощью веб-браузера со Microsoft Office или доступных надстроек. Надстройка кнопку установки на компьютери и сообщить, помогла использовании Plex существует форму можно сохранить Excel. замены формул на появляться в интерфейсемакросов-процедур макросов надстройки. надстройки. и нажмите на файла:» введите название страницы Загрузки или Excel. Для использования не будет удаленаЗаменить (обычно пакеты установкиФормат евро ли она вам, возможность объединения ячеек
Шаг 4. Добавляем в надстройку функции
как шаблон иК таким наборам макросов значения. Excel после подключения, существуют еще иКод можно либо набратьНадстройка — это отдельный кнопку ОК. для своей тестовой с других сайтов этих надстроек в с компьютера.. имеют расширение MSI),. с помощью кнопок
с сохранением текста использовать в дальнейшем. относятся:Сохраняем внесенные изменения и, нашей надстройки.макросы-функции «с нуля» (если файл. ЕгоДаже если вы не
программы. А из в Интернете, на
- большинстве случаев нужноЧтобы удалить надстройку COMЕсли приложение Excel было а затем запустить
- Вкладка внизу страницы. Для при использовании символа-разделителя.
- В составе уже«Пакет анализа», с помощью вернувшись в ExcelИнформация об отображаемых вкладкахили как их
вы умеете программировать),легко переносить умеете программировать, то выпадающего списка «Тип сервере организации или лишь активировать их. из списка доступных установлено отдельно, в его.Надстройки удобства также приводимДанная надстройка снабжена инструментом находятся более 50 которого Excel получает проверяем результат: по умолчанию содержится еще называют либо скопировать откуда-нибудь
с компьютера на существует множество мест файла:» выберите значение используя встроенный вСкачиваемые надстройки. надстроек и с списке установленных программДругие надстройки, отсутствующие на
. Другие надстройки можно ссылку на оригинал по форматированию текста, встроенных формул и возможность совершать статистические,Вот и всё внутри книги и
- UDF уже готовый (что
- компьютер, делиться им (книги, сайты, форумы), «Надстройка Excel 97-2003» Excel Дополнительные надстройки для Excel
- компьютера, щелкните ее выберите название программы, компьютере, можно скачать добавить на вкладку
- (на английском языке). который позволяет преобразовать различных функций. инженерные или финансовые — надстройка готова
- должна быть оформлена( гораздо проще). Давайте,
- с коллегами или где можно найти (*.xla). Автоматически откроеться
магазин можно скачать и имя в поле
Шаг 5. Создаем вкладку надстройки в интерфейсе
а затем нажмите и установить сНадстройкиНадстройки расширяют диапазон команд кириллицу в латиницу,В данной надстройке имеется функции, некоторые из к использованию. Наполните в виде специального
User Defined Function = для пробы, введем даже продавать ;) готовый код макросов папка для установки. Чтобы скачать их, установить со страницыСписок надстроек кнопку помощью веб-браузера со. Эта вкладка добавляется и возможностей Microsoft изменять регистр и форма для ввода которых доступны через
её своими процедурами XML-кода. Проще всего
- пользовательская функция). в добавленный пустойДавайте рассмотрим весь процесс на VBA для надстроек: C:Documents and
- следуйте инструкциям по Загрузки на сайте, а затем нажмитеЗаменить
- страницы Загрузки или на ленту после Excel. По умолчанию выполнять другие операции. времени в заданную стандартные формулы, но
- и функциями, добавьте писать и редактироватьДавайте создадим в модуль код простого, создания своей собственной огромного количества типовых SettingsUser_Name AppDataRoamingMicrosoftAddIns. И установке. Office.com. кнопку
- . с других сайтов установки и активации они доступны неИспользуя данный набор макросов, ячейку. обеспечивающие иной формат
красивые кнопки - такой код с нашей надстройке отдельный
но полезного макроса: надстройки для Microsoft задач в Excel. нажмите на кнопкуУстановка надстроек из магазинаПользовательские надстройкиУдалитьЕсли вы установили надстройку в Интернете или первой надстройки, которая сразу, поэтому сначала можно отбирать строкиПомимо этого, данный набор вывода. и использовать макросы помощью специальных программ
модуль (команда меню После набора кода не Excel по шагам. По моему опыту, «Сохранить».Откройте вкладку Многие разработчики и поставщики. из Центра загрузки, на сервере организации. должна отображаться на их необходимо установить на основе заданной - макросов позволяет осуществлять«Пакет анализа VBA», предоставляющий в работе станет — XML-редакторов. ОднаInsert — Module забудьте нажать наОткрываем Microsoft Excel с большинство пользователей раноПеред тем как установить
- Вставка
- решений создают пользовательскиеПримечание: выберите имя программы Чтобы скачать их, ней. Если вкладка и (в некоторых ячейки. бэкап книги с возможность программистам публиковать намного проще.
- из самых удобных) и вставим туда кнопку сохранения (дискетку)
пустой книгой и или поздно собирают надстройку в Excel,. надстройки COM, надстройки С помощью этой процедуры в списке установленных следуйте инструкциям поНадстройки
planetaexcel.ru
случаях) активировать.
Skip to content
Сегодня мы продолжим изучение пользовательских функций Excel. Поскольку вы уже знаете, как их создавать (и, я надеюсь, вы также пробовали применять их), давайте копнем немного глубже и узнаем, как использовать и хранить определяемые пользователем функции в Excel.
Мы покажем вам, как легко сохранить ваши функции в файле надстройки Excel, чтобы использовать их позже буквально несколькими нажатиями мышки.
Вот о чем мы будем говорить:
- Совместное использование с другими функциями
- Применение в других функциях и макросах VBA
- Как вызвать функцию из другой книги
- Использование файла надстройки (рекомендуется)
Использование с другими функциями
После того, как вы проверили, что ваши пользовательские функции работают правильно, их можно использовать в формулах Excel или в коде VBA.
Пользовательские функции в рабочей книге Excel можно применять точно так же, как вы применяете обычные функции. Например, просто запишите в ячейке формулу
=GetMaxBetween(A1:A6;10;50)
Их также можно использовать в сочетании с обычными функциями. Например, добавим поясняющий текст к рассчитанному максимальному значению:
=СЦЕПИТЬ(«Максимальное значение между 10 и 50 – «;GetMaxBetween(A1:A6;10;50))
Результат вы видите на скриншоте ниже:
Можно найти товар, количество которого максимальное и находится в диапазоне от 40 до 50.
В формуле
=ИНДЕКС(A2:A9;ПОИСКПОЗ(GetMaxBetween(B2:B9;F1;F2);B2:B9;0))
пользовательская функция GetMaxBetween находит в диапазоне B2:B9 максимальное число между 40 и 50. Затем при помощи функций ИНДЕКС+ПОИСК мы получаем название товара, которое соответствует этому максимальному значению:
Как видите, использование настраиваемых функций ничем не отличается от обычных функций Excel.
При этом помните, что пользовательская функция может только возвращать значение, но не может выполнять никакие другие действия. Более подробно об ограничениях пользовательских функций читайте здесь.
Применение в других функциях и процедурах VBA
Пользовательские функции также можно использовать в макросах VBA.
На скриншоте ниже вы видите код макроса, который в столбце, содержащем активную ячейку, ищет максимальное значение в диапазоне от 10 до 50.
Код макроса содержит пользовательскую функцию GetMaxBetween(.Cells, 10, 50). Она находит нужное максимальное значение в активном столбце. Затем это значение будет выделено цветом.
Результат работы макроса вы видите на скриншоте ниже.
Также пользовательская функция может быть использована внутри другой пользовательской функции. Проблема конвертации числа в текст обычно решается при помощи пользовательской функции. Функция SpellNumber отлично выполняет эту задачу, добавляя также денежные единицы измерения (рубли). Вот код этого макроса:
Public Function SpellNumber(x As Double) As String
If x > 999999999999.99 Then
SpellNumber = "Число больше 999 999 999 999.99!"
ElseIf x < 0 Then
SpellNumber = "Отрицательное число!"
Else
x = FormatNumber(x, 2)
Dim b As Byte, b1 As Byte, b2 As Byte, kop As String
b = (x - Fix(x)) * 100
b2 = b 10
b1 = b Mod 10
If b2 <> 1 And b1 = 1 Then
kop = " копейка"
ElseIf b2 <> 1 And b1 > 1 And b1 < 5 Then
kop = " копейки"
Else
kop = " копеек"
End If
kop = b2 & b1 & kop
Dim y(1 To 4) As Integer, i1 As Byte
For i1 = 1 To 4
x = Fix(x) / 1000
y(i1) = (x - Fix(x)) * 1000
Next
Dim Numeric(1 To 4) As String, i2 As Byte, y1 As Byte, y2 As Byte, _
y3 As Byte, Numeric0 As String, Numeric1 As String, Numeric2 As String, Numeric3 As String, _
Numeric4 As String
For i2 = 1 To 4
y1 = y(i2) Mod 10
y2 = (y(i2) - y1) / 10 Mod 10
y3 = y(i2) 100
Numeric1 = Choose(y3 + 1, "", "сто ", "двести ", "триста ", "четыреста ", _
"пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
Numeric2 = Choose(y2 + 1, "", "", "двадцать ", "тридцать ", "сорок ", _
"пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
If y2 = 1 Then
Numeric3 = Choose(y1 + 1, "десять ", "одиннадцать ", "двенадцать ", _
"тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", _
"семнадцать ", "восемнадцать ", "девятнадцать ")
ElseIf y2 <> 1 And i2 = 2 Then
Numeric3 = Choose(y1 + 1, "", "одна ", "две ", "три ", "четыре ", "пять ", _
"шесть ", "семь ", "восемь ", "девять ")
Else
Numeric3 = Choose(y1 + 1, "", "один ", "два ", "три ", "четыре ", "пять ", _
"шесть ", "семь ", "восемь ", "девять ")
End If
If y2 <> 1 And y1 = 1 Then
Numeric4 = Choose(i2, "рубль ", "тысяча ", "миллион ", "миллиард ")
ElseIf y2 <> 1 And y1 > 1 And y1 < 5 Then
Numeric4 = Choose(i2, "рубля ", "тысячи ", "миллиона ", "миллиарда ")
ElseIf y1 = 0 And y2 = 0 And y3 = 0 Then
Numeric4 = Choose(i2, "рублей ", "", "", "")
Else
Numeric4 = Choose(i2, "рублей ", "тысяч ", "миллионов ", "миллиардов ")
End If
Numeric(i2) = Numeric1 & Numeric2 & Numeric3 & Numeric4
Next
If y(1) + y(2) + y(3) + y(4) = 0 Then
Numeric0 = "ноль рублей " & kop
Else
Numeric0 = Numeric(4) & Numeric(3) & Numeric(2) & Numeric(1) & kop
End If
SpellNumber = Replace(Numeric0, Left(Numeric0, 1), UCase(Left(Numeric0, 1)), 1, 1)
End If
End Function
Применив вместе уже знакомую нам GetMaxBetween и SpellNumber, мы можем получить максимальное значение из диапазона и сразу записать его в виде текста.
Для этого создадим новую пользовательскую функцию, в которой используем уже знакомые нам функции GetMaxBetween и SpellNumber.
Function SpellGetMaxBetween(rngCells As Range, MinNum, MaxNum)
SpellGetMaxBetween = SpellNumber(GetMaxBetween(rngCells, MinNum, MaxNum))
End Function
Как видите, функция GetMaxBetween является аргументом другой пользовательской функции – SpellNumber. Сначала она определяет максимальное значение, как мы уже неоднократно делали ранее. Затем это число преобразуется в текст.
На скриншоте выше вы видите, как функция SpellGetMaxBetween находит максимальное число в диапазоне от 5000 до 7000, а затем конвертирует его в текст.
Как вызвать пользовательскую функцию из другой книги
Если вы создали пользовательскую функцию в вашей рабочей книге, то это ещё, к сожалению, не означает, что её можно без проблем везде применять.
По моему опыту, большинство пользователей рано или поздно собирают свою личную коллекцию макросов и пользовательских функций для автоматизации отдельных процессов и расчётов. И тут встает проблема: код пользовательских функций на Visual Basic нужно где-то хранить, чтобы потом использовать в работе.
Чтобы применить пользовательскую функцию, рабочая книга, в которой вы ее сохранили, должна быть открыта в вашем Excel. Если вы это не сделали, то при попытке использования вы получите ошибку #ИМЯ!. Эта ошибка говорит о том, что Excel не знает имени функции, которую вы хотите употребить в формуле.
Рассмотрим способы, при помощи которых вы можете использовать созданные настраиваемые функции.
Способ 1.
Вы можете перед именем функции указать имя книги, в которой она находится. Например, если вы сохранили пользовательскую функцию GetMaxBetween в книге с именем My_Functions.xlsm, то необходимо ввести такую формулу:
= My_Functions.xlsm!GetMaxBetween(A1:A6;10;50)
Способ 2.
Сохраняем все пользовательские функции в одной специальной рабочей книге (например, My_Functions.xlsm ) и копируем из нее нужную функцию в текущую рабочую книгу в случае необходимости. Тогда не нужно будет указывать имя файла, как это сделано выше.
При создании каждой новой пользовательской функции вам необходимо дублировать ее код в ту книгу, в которой вы будете ее использовать. При таком способе возникает несколько неудобств:
- Если рабочих файлов много, а функция нужна везде, то и копировать код придется в каждую книгу.
- Нужно не забыть сохранить рабочую книгу в формате с поддержкой макросов (xlsm или xlsb).
- При открытии такого файла защита от макросов будет каждый раз показывать предупреждение, которое нужно подтвердить. Многие пользователи пугаются, видя предупреждение на жёлтой полосе, которое просит их включить макросы. Чтобы не видеть это сообщение, вам нужно отключить защиту Excel полностью. Это может быть не всегда правильно и безопасно.
Думаю, вы согласитесь со мной, что все время открывать файл и копировать из него код пользовательских функций или писать название этого файла в формуле – это не самые удачные решения.
Способ 3.
Думаю, что самый лучший способ – хранить часто используемые пользовательские функции в файле надстройки (Excel Add-in).
Достоинства использования надстройки:
- Достаточно один раз подключить надстройку в ваш Excel. После этого можно использовать её процедуры и функции в любом файле на этом компьютере. Сохранять ваши рабочие книги в xlsm- и xlsb-формате не потребуется, так как исходный код будет храниться не в них, а в файле надстройки.
- Защита от макросов вас беспокоить уже не будет, так как надстройки всегда относятся к доверенным источникам. Она будет автоматически загружаться при каждом запуске Excel практически незаметно для вас.
- Надстройка – это отдельный файл. Его легко переносить с компьютера на компьютер, делиться им с коллегами.
О создании и использовании надстройки мы подробнее поговорим далее.
Сохранение пользовательских функций в файле надстройки
Как создать собственную надстройку? Рассмотрим пошагово.
Шаг 1. Создаем файл надстройки.
Открываем Microsoft Excel, создаем новую книгу и сохраняем ее под любым подходящим именем (например My_Functions) в формате надстройки. Для этого используем меню Файл – Сохранить как или клавишу F12
. Обязательно указываем тип файла Надстройка Excel:
Ваша надстройка будет иметь расширение .xlam.
Обратите внимание, что стандартно Excel хранит надстройки в папке C:Users[Ваше_имя]AppDataRoamingMicrosoftAddIns. Советую принять расположение по умолчанию. Вы можете указать любую другую папку. Но тогда при подключении надстройки вам нужно будет найти и указать ее новое расположение вручную. Если вы сохраните ее в папке по умолчанию, вам не придется искать надстройку на своем компьютере. Excel автоматически внесет ее в список.
Шаг 2. Подключаем файл надстройки.
Теперь созданную нами надстройку My_Functions надо подключить к Excel. Тогда она будет загружаться автоматически при старте программы. Для этого используем меню Файл — Параметры — Надстройки. Убедитесь, что внизу в поле Управление выбраны Надстройки Excel. Жмем на кнопку Перейти в нижней части окна. В появившемся окне отмечаем нашу надстройку My_Functions. Если вы не видите ее в списке, нажмите кнопку Просмотр и укажите расположение вашего файла надстройки вручную.
Если вы используете надстройку для хранения пользовательских функций, то нужно выполнять одно простое правило. Если вы передаете рабочую книгу другому человеку, то не забудьте также передать копию этой надстройки, которая содержит нужные функции. Он должен подключить ее так же, как вы это сделали сейчас.
Шаг 3. Добавляем в надстройку пользовательские функции и макросы.
Наша надстройка подключена к Excel, но в ней пока нет ничего. Чтобы добавить в нее новые пользовательские функции, откройте редактор Visual Basic при помощи сочетания клавиш Alt+F11
. После этого вы можете добавлять новые модули с кодом VBA, как описано в этом руководстве.
Выберите в окне VBAProject ваш файл надстройки (My Finctions.xlam). Используйте меню Insert – Module, чтобы добавить пользовательский модуль. В него нужно записывать пользовательские функции.
Код пользовательской функции вы можете либо набрать вручную, либо скопировать откуда-нибудь.
Вот и все. Теперь вы создали свою собственную надстройку, загрузили ее в Excel и можете использовать в ней макросы и настраиваемые функции. Чтобы добавить новый макрос, просто запишите его код в модуле надстройки в редакторе VBA и сохраните его.
Мы рассмотрели способы создания, отладки пользовательской функции и как ее можно применять в вашей рабочей книге. Надеюсь, эти рекомендации будут вам полезны. Если у вас есть вопросы, пишите в комментариях к этой статье.
Хитрости »
11 Август 2014 95513 просмотров
Как создать свою надстройку?
В этой статье:
- Что такое надстройка
- Как создать надстройку
- Создание собственного меню надстройки для версий Excel 2003
- Создание собственного меню надстройки для версий 2007 и выше
ЧТО ТАКОЕ НАДСТРОЙКА
Для начала разберемся — что такое надстройка и для чего она нужна.
Надстройка
— это файл Excel, имеющий расширение .xla или .xlam(только для 2007 и выше), который по умолчанию открывается как скрытая рабочая книга и может быть подключен к приложению для автоматического запуска вместе с запуском самого приложения. Книга надстройки открывается, но в списке видимых открытых файлов не значится, поэтому нет смысла её там искать. Отобразить такую книгу возможно только кодом.
Есть также и другие виды надстроек — надстройки COM и XLL-надстройки. Но о них я не буду рассказывать, т.к. они разрабатываются не в VBA, а в иных средах программирования
Как правило надстройки используют для распространения программного кода, который будет доступен для любой книги Excel. Т.к. надстройка запускается вместе с приложением — очень удобно хранить в ней коды. Можно создать меню для запуска процедур(об этом ниже) и функции пользователя — созданные в надстройке они доступны в любой открытой книге Excel без ссылок на другую книгу, что несомненно очень удобно. Функции пользователя, прописанные в надстройке для Excel 2007 и выше так же доступны по вводимым начальным символам:
и после нажатия TAB имя функции будет вставлено в ячейку.
Кроме модулей с кодами надстройки могут содержать и таблицы данных и диаграммы и все, что можно хранить в обычной книге. Но учитывая то, что книга скрыта — особого смысла в этих данных нет, если только не предполагается использовать эти данные в качестве шаблонов для создания определенных отчетов из надстройки. Часто на листах надстроек хранят константы для работы кода, если по каким-либо причинам не хочется использовать константы внутри кода VBA. Данные в ячейках файла надстройки можно изменять во время работы, но я не рекомендую сохранять открытый и исполняемый в данный момент файл надстройки, во избежание конфликтов.
КАК СОЗДАТЬ НАДСТРОЙКУ
Создать надстройку просто: из любого файла Excel идете в меню:
- Excel 2010 и новее: Файл (File)—Сохранить как (Save As)-Из выпадающего списка «Тип файла» выбрать Надстройка Excel(.xlam) (Excel Add-In(.xlam)) или Надстройка Excel 97-2003(.xla) (Excel 97-2003 Add-In(.xla)).
- Excel 2007: Кнопка Офис—Сохранить как (Save As)-Из выпадающего списка «Тип файла» выбрать Надстройка Excel(.xlam) (Excel Add-In(.xlam)) или Надстройка Excel 97-2003(.xla) (Excel 97-2003 Add-In(.xla)).
- Excel 2003: Меню—Сохранить как-Из выпадающего списка «Тип файла» выбрать «Надстройка Excel(.xla)«.
Однако рекомендую не спешить с сохранением файла как надстройки. Сначала следует весь функционал, закладываемый в надстройку, потестировать, отладить и удостовериться, что все работает как предполагалось. Т.к. после сохранения файла как надстройки и открытия надстройки в Excel — закрыть её можно будет только закрыв Excel полностью(конечно, можно еще воспользоваться кодом вроде Workbooks("MyAddin.xla").Close
, но это не очень удобно в разработке).
Если все же сохранили файл как надстройку, но хотите что-то изменить в книге(удалить лишние листы, изменить информацию на листах(часто так делается для хранения настроек) и т.п.) — то надо в редакторе VBA найти проект надстройки, перейти в свойства модуля ЭтаКнига(или ThisWorkbook) и выставить IsAddin = False. Книга отобразиться. Далее надо будет вернуть свойство IsAddin в True и сохранить проект
Так же следует заранее выбрать формат надстройки — для версий Excel 97-2003(.xla) и или только от 2007(.xlam) и выше. Надстройки .xla работают во всех версиях Excel, в том числе и в 2007 и выше. Это, пожалуй, единственное их преимущество перед форматом .xlam. Т.к. при этом все меню, которые будут созданы для вызова кодов, в версиях от 2007 и выше будут располагаться на вкладке «Надстройки» и будут иметь минимум настроек: нет возможности изменить размер значка; разбить на группы; сделать красивые подсказки; расположить в два ряда и т.п.
Для формата .xlam доступен более широкий ассортимент: они могут так же создать меню на вкладке «Надстройки», а могут и создавать собственные вкладки(через XML-схемы), команды на которых можно расположить в соответствии со всеми красивостями и достоинствами оформления, которое можно наблюдать в Ribbon-панелях Excel 2007 и выше.
Дальше я как раз более подробно расскажу про оба метода создания меню.
Я покажу создание надстроек на примере простого кода, который будет записывать в активную ячейку текущего листа число 10, закрасит ячейку красным цветом и установит для ячейки границы.
Код этой процедуры:
'--------------------------------------------------------------------------------------- ' Procedure : Test ' DateTime : 11.08.2014 12:08 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : Записываем в активную ячейку число 10 ' красим в красный цвет заливку ' устанавливаем границы '--------------------------------------------------------------------------------------- Sub Test() With ActiveCell .Value = 10 .Interior.Color = vbRed .Borders.Color = vbBlack End With End Sub
Важно: Код помещается в стандартный модуль книги, из которой хотите сделать надстройку.
СОЗДАНИЕ СОБСТВЕННОГО МЕНЮ НАДСТРОЙКИ ДЛЯ ВЕРСИЙ EXCEL 2003
Примерный вид данного меню в Excel 2003:
Примерный вид меню в Excel 2007 и выше:
Собственно, меню, совместимое со всеми версиями Excel делается исключительно на уровне VBA следующим кодом:
'--------------------------------------------------------------------------------------- ' Module : ЭтаКнига ' DateTime : 11.08.2014 12:13 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : '--------------------------------------------------------------------------------------- Option Explicit 'константа уровня модуля - имя меню 'Обязательно задать, чтобы можно было идентифицировать Const sMenuBarName As String = "Test Addin www.Excel-VBA.ru" '--------------------------------------------------------------------------------------- ' Procedure : Workbook_BeforeClose ' Purpose : Процедура выполняется перед закрытием книги ' удаляем созданное меню после закрытия надстройки '--------------------------------------------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next ' обработчик ошибки нужен, если меню такого нет 'удаляем меню, для исключения дублирования меню при повторном запуске Application.CommandBars(sMenuBarName).Delete End Sub '--------------------------------------------------------------------------------------- ' Procedure : Workbook_Open ' DateTime : 11.08.2014 12:39 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : Процедура создания меню ' как отдельная панель для 2003 ' на вкладке "Надстройки" для 2007 и выше '--------------------------------------------------------------------------------------- Private Sub Workbook_Open() On Error Resume Next ' обработчик ошибки нужен, если меню такого нет 'удаляем меню, для исключения дублирования меню при повторном запуске Application.CommandBars(sMenuBarName).Delete On Error GoTo 0 'добавляем меню With Application.CommandBars.Add(sMenuBarName, temporary:=True) 'добавляем новую кнопку With .Controls.Add(Type:=1) 'добавляем обычную кнопку на панель 'отображаемый текст кнопки .Caption = "ИЗМЕНИТЬ СВОЙСТВА АКТИВНОЙ ЯЧЕЙКИ" 'стиль кнопки 'доступные стили: '1 - только значок(16x16) '2 - только текст '3 - картинка и текст .Style = 3 'назначаем картинку из набора офиса 'посмотреть доступные можно: http://www.excel-vba.ru/general/moi-nadstrojki/panel-ikonok-faceid/ .FaceId = 2 'имя процедуры, которая будет выполнена при нажатии кнопки .OnAction = "Test" End With 'делаем меню видимым .Visible = True End With End Sub
Основные моменты я постарался расписать в комментариях, но на некоторых все же хочу заострить внимание.
- Свойство Type
.Controls.Add(Type:=1)
Наверное, самое важное свойство. Оно отвечает за тип элемента меню. Доступно всего пять типов:- 1 — Button(обычная кнопка)
- 2 — TextBox(текстовое поле с возможностью записи в него значений и считывания значений из него)
- 3 — List(выпадающий список с заранее заданным списком значений)
- 4 — ComboBox(выпадающий список с возможностью записи в поле произвольного значения)
- 10 — PopupMenu(выпадающее меню с возможностью добавления новых элементов)
- Свойство Style
.Style = 3
данное свойство управляет видом кнопки. Доступные стили:- 1 — только значок(16×16). Необходимо указывать свойство FaceID
- 2 — только текст. Свойство FaceId может быть указано, но никак не влияет на внешний вид кнопки
- 3 — картинка и текст. Обязательно указывать хотя бы одно из свойств: Caption или FaceID
Если хотите отобразить просто значок или значок вместе с текстом — то столкнетесь с проблемой выбора значка. Поэтому я давно создал надстройку, которая позволяет просмотреть все ID всех доступных значков офиса: Панель иконок FaceID.
Так же можно и свои значки создавать, однако я не буду здесь затрагивать эту тему, т.к. получится запутанно и обширно. Если кратко: необходимо создать свой значок размером 16×16, с расширением .gif. Затем создать копию иконки и предполагаемые непрозрачные области закрасить черным, а прозрачные — белым. Эту копию необходимо задать для свойства .Mask - Свойство OnAction:
.OnAction = «Test»
Данная строка отвечает за назначение процедуры, которая будет выполнена после нажатия на кнопку(в случае с ComboBox и TextBox — изменение значения. Вызван код будет после выхода из режима редактирования элемента). Test — это имя процедуры. Её я привел выше и именно она будет выполнена при нажатии на эту кнопку.
Иногда возникает вопрос: как сделать на такой панели ToggleButton? Т.е. кнопку, которая при нажатии остается в нажатом состоянии, а при повторном нажатии — в отжатом(т.е. в обычном). В данном случае это возможно исключительно через «финты» вызываемой по нажатию кнопки процедуры:
Sub Add_CmBar() With Application.CommandBars.Add("Test ToggleButton", temporary:=True) With .Controls.Add(Type:=1) .Caption = "ToggleButton" .Style = 2 .OnAction = "Emulate_Toggle" End With .Visible = True End With End Sub 'процедура, которая выполняется при нажатии кнопки "ToggleButton". Меняет видимое состояние кнопки. Sub Emulate_Toggle() Dim bt As CommandBarButton Set bt = Application.CommandBars.ActionControl 'проверяем текущее состояние кнопки. 'если нажата - отжимаем, если отжата - нажимаем If bt.State = msoButtonDown Then bt.State = msoButtonUp Else bt.State = msoButtonDown End If End Sub
Еще одна проблема при разработке таких панелей: невозможность явно указать кнопку в стиле Caption(т.е. неактивную к нажатию кнопку). Это тоже можно сделать при помощи обычной Button, только в свойствах кнопки надо свойство Enabled установить в False:
.Enabled = False
при этом обязательно необходимо указать Style 2 и назначить Caption.
Положение CommandBar на панели
Так же у объекта CommandBar есть такие свойства как .Left(положение относительно левого края окна Excel) и .Top(положение относительно верхнего края окна Excel), которые задают положение строки меню на панели. Но они мало актуальны для версий 2007 и выше, т.к. там для таких панелей отведена отдельная вкладка и все они помещаются на ней в том порядке, в котором были на неё добавлены. По умолчанию, если данные свойства не заданы — в 2003 Excel панель создается плавающая и пользователь может переместить её в любое удобное для него место. Если же они указаны, то панель будет расположена в заданных координатах относительно окна Excel.
Во вложении ниже пример надстройки с открытым кодом. Но в примере код расширен — там я привел коды с использованием всех типов элементов: и кнопки, и эмуляция ToggleButton, и списки, и текстбокс и выпадающее меню с доп.кнопками. В кодах есть комментарии, поэтому при желании разобраться не составит труда.
Так же можно при запуске надстройки добавлять в контекстное меню(меню, появляющееся по правому клику мыши на ячейке) свои команды. По сути мало что меняется, кроме пары вещей:
- надо указывать конкретное имя меню, в которое добавляем некую кнопку. Для контекстного меню ячеек это «Cell»:
Application.CommandBars(«Cell») - лучше указывать положение элемента относительно уже существующих в меню. Делает это при помощи указания параметров before или after:
Application.CommandBars(«Cell»).Controls.Add(Type:=1, before:=4)
При этом добавить можно как собственные кнопки, так и уже существующие. Для примера добавим одной кнопкой дубль нашей команды с лены «ИЗМЕНИТЬ СВОЙСТВА АТИВНОЙ ЯЧЕЙКИ», а второй — вставку в ячейку только значений(встроенная команда — подробнее в статье: Как удалить в ячейке формулу, оставив значения?):
'========================================================= ' ' ДОБАВЛЯЕМ СВОЙ ПУНКТ В МЕНЮ ПРАВОЙ КНОПКИ МЫШИ ' With Application.CommandBars("Cell") 'дублируем кнопку "ИЗМЕНИТЬ СВОЙСТВА АТИВНОЙ ЯЧЕЙКИ" с панели 'добавляем перед 4-м элементом With .Controls.Add(Type:=1, before:=4) .Caption = "ИЗМЕНИТЬ СВОЙСТВА АТИВНОЙ ЯЧЕЙКИ" .Style = 3 .FaceId = 2 .OnAction = "Test" End With 'добавляем кнопку встроенной в Excel команды "Вставить значения" 'ищем команду "Вставить значения" по её ID в контекстном меню Set cbb = .FindControl(ID:=370) 'удаляем команду из меню, если она была уже добавлена ранее If Not cbb Is Nothing Then cbb.Delete End If 'добавляем перед 5-м элементом(после наше собственной команды) .Controls.Add ID:=370, before:=5 End With
Скачать пример:
Надстройка для Excel 97-2003 и выше.zip (22,6 KiB, 3 080 скачиваний)
СОЗДАНИЕ СОБСТВЕННОГО МЕНЮ НАДСТРОЙКИ ДЛЯ ВЕРСИЙ EXCEL 2007
Как я уже писал — для Excel 2007 и выше подходит описанный выше метод создания собственного меню для ранних версий. Однако меню в данном случае помещается исключительно на вкладку «Надстройки» и имеет довольно убогий вид (как можно лицезреть выше) в сравнении с общим Ribbon-интерфейсом других панелей. Чтобы посмотреть как это выглядит можете просто скачать файл выше и запустить его. Появится вкладка «Надстройки» с одной кнопкой.
Однако учитывая появившуюся в 2007 версии офиса возможность кастомизировать ленту Ribbon через язык XML, гораздо практичнее(особенно для разработчиков) создавать собственную панель с отдельным именем, на которой можно разместить красиво команды, добавить свои собственные значки для команд без особых усилий.
Примерно так можно все это оформить:
Чтобы добавить свою панель необходимо изменить XML-схему для надстройки, которая присутствует в любом файле формата 2007. Есть несколько методов(я опишу лишь два).
Первый метод
, он же совсем неудобный и требует навыков работы с XML
- Изменить расширение файла с .xlam на .rar или .zip и открыть любым архиватором.
Если не отображается расширение:
Панель управления—Свойства папки(для Win 7 — Параметры папок)- вкладка Вид— Снять галочку с «Скрывать расширение для зарегистрированных типов файлов» - Добавить в архив папку «customUI», папку «_rels» и папку «images»
- Создать файл «customUI.xml», который лично я бы назвал основным — в нем необходимо впоследствии прописать все панели и команды по законам языка XML. После чего данный файл необходимо поместить в папку «customUI»
- В папке «images» будут храниться все значки, которые будут расположены на панели
- Папка «_rels» должна внутри содержать файл «customUI.xml.rels», в котором перечисляются связи картинок с командами и панелями. Проще говоря — схема взаимосвязей ресурсов
Но все это очень муторно и необходимо знать язык XML. Уверен, большая часть читающих статью уже 100500 раз нахмурили брови и пару раз перечитали, надеясь понять о чем речь. Поэтому не будем дальше разбирать этот метод и перейдем к следующему.
Второй метод куда практичнее — использовать специальные программы для работы с Ribbon итерфейсом. Такие как Office Ribbon Editor, RibbonXMLEditor, OpenXML package editor и им подобные. Я сам использую для этих целей надстройку Максима Новикова — RibbonXMLEditor, последнюю версию которой можно скачать по адресу: http://novikovmaxim.narod.ru/index.htm?http://novikovmaxim.narod.ru/products/ribbon/ribbon.htm. На том же сайте можно найти примеры работы с Ribbon-панелью офиса и более подробно почитать про создание своих панелей. Я бы даже рекомендовал это сделать, если планируете создавать подобные файлы. Сама же программа RibbonXMLEditor бесплатна и не требует установки. Но функционал весьма достойный, а использование достаточно простое. Я не буду заострять внимание на всех нюансах работы с ней — все это можно найти на сайте её создателя(что я лично категорично рекомендую). Опишу лишь основное, что может потребоваться.
Для начала работы и создания своего меню необходимо открыть программу RibbonXMLEditor и выбрать в ней файл, в который хотите внедрить меню. Это должен быть файл формата .xlsm,.xlam или .xlsb. Т.к. мы создаем надстройку — наш формат .xlam.
На рисунке отмечены цифрами шаги, расписанные ниже:
1. Добавляете ribbon (нажатием кнопки на элементе)
2. Далее tabs и tab(так же автоматом добавится элемент groupe) — выделяете строку и внутрь кавычек для id вписываете groupe_1, а для label вписываете имя вкладки — Свойства ячейки.
3. Уже после этого внутрь groupe добавляете button и задаете ей id — change_cell. Должен получится такой код:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" /> </group> </tab> </tabs> </ribbon> </customUI>
Id каждого элемента должно быть уникальным и предпочтительнее указывать его исключительно на латинице(англ.алфавит), т.к. кириллица распознается с трудом и есть шанс получить ошибку.
Теперь продолжаем добавлять свойства для button:
4. для начала подгружаем картинку через соответствующую кнопку.
5. После этого она будет в выпадающем списке правее.
6. Ставим курсор после «change_cell» и нажимаем кнопку вставки тега изображения. Вставляется тег и название. Теперь у нашей кнопки есть картинка.
7. При помощи выпадающего меню параметров выбираем label и вставляем данный тег кнопкой, расположенной правее выпадающего списка. Курсор автоматически будет помещен внутрь кавычек. Вписываем текст — Изменить свойства ячейки.
8. При помощи выпадающего списка функций обратного вызова выбираем onAction и так же вставляем. Вписываем туда имя вызываемой процедуры — CallTest.
В результате должно получиться:
<?xml version="1.0" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" /> </group> </tab> </tabs> </ribbon> </customUI>
Для отладки схемы через RibbonXMLEditor можно использовать кнопку отладки(зеленый треугольник) или сочетание клавиш F9. Для проверки корректности схемы — зеленая галочка. Жмем на неё и если в схеме будут ошибки — они сразу будут найдены и показаны в сообщении, с указанием номера строки и столбца, в которых ошибка.
На этом, казалось бы, все. Но нет. Просто так, сама по себе XML-схема не вызовет процедуру — необходимо создать функции обратного вызова. Вот здесь у RibbonXMLEditor есть еще одна отличная функция — генерация модуля обратных вызовов — 9. Нажимаем на кнопку — получаем готовые функции. Как правило верхние две строки не нужны — нам нужны лишь сами функции:
Sub CallTest(control As IRibbonControl) End Sub
Копируем. Сохраняем схему нажатием дискеты в RibbonXMLEditor и закрываем программу.
Теперь открываем наш файл и вставляем скопированный текст функции. В эту функцию прописываем вызов нашей, уже созданной ранее процедуры: Test
Sub CallTest(control As IRibbonControl) Call Test End Sub
В принципе, можно и прямо в эту процедуру прописать все действия из процедуры Test.
Сохраняем.
Открываем наш файл — видим, что новая вкладка «Test excel-vba.ru» появилась, кнопка на ней есть. По нажатии на кнопку выделенная ячейка окрашивается в красный цвет, в ней прописывается значение 10 и создаются границы.
Так же можно вставлять на свою вкладку встроенные команды. Для этого в button используется не id, а idMso. Эти команды не нуждаются в обработке обратных вызовов, т.к. при их использовании происходит вызов встроенных функций — кнопки как бы просто дублируются на нашу вкладку со всеми их возможностями. Например, чтобы добавить на свою вкладку стандартную кнопку перехода в VisualBasic надо добавить кнопку с idMso VisualBasic:
<button idMso="VisualBasic" />
Сам код при этом будет выглядеть так:
<?xml version="1.0" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" /> <button idMso="VisualBasic" /> </group> </tab> </tabs> </ribbon> </customUI>
Естественно, на создании одних кнопок функционал лент Ribbon не ограничивается. Доступны почти все элементы(вып.меню, галереи, большие иконки(32х32) и т.д.), которые есть в стандартных вкладках. Если чуть потренироваться и поэкспериментировать с приложением RibbonXMLEditor — то вскоре вы сможете быстро и легко создавать красивые и функциональные приложения. Как пример таких приложений можете посмотреть описание к моей надстройке MulTEx.
Так же как и в случае с надстройками для 2003 Excel, здесь можно создавать кнопки в контекстном меню(правая кнопка мыши), но и тут не обошлось без нюансов:
- изменение данного меню доступно только начиная с версии Excel 2010. Для 2007 версии придется использовать старые методы — те же, что и для 2003(т.е. внедрение отдельного кода на Workbook_Open надстройки, как в примере выше для надстройки 2003)
- в надстройке Ribbon XML Editor я не нашел встроенного инструмента для вставки кодов обработки меню правой кнопкой мыши. Похожий по «звучанию» contextualTabs не совсем то, что нужно(а если быть точнее — совсем не то). contextualTabs — это динамические вкладки, которые появляются после основных вкладок при работе с определенными объектами. Например, с умными таблицами. Когда выделяем умную таблицу или любую ячейку в ней, то появляется группа динамических вкладок «Работа с таблицами». Вот в неё и вносятся изменения при помощи contextualTabs
Поэтому прописывать «добавки» в меню по правой кнопке мыши придется самостоятельно. Код вставки уже имеющегося у нас кода приведен ниже:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <ribbon startFromScratch="false"> <tabs> <tab id="excel-vba" label="Test excel-vba.ru"> <group id="groupe_1" label="Свойства ячейки"> <button id="change_cell" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" /> <button idMso="VisualBasic" /> </group> </tab> </tabs> </ribbon> <contextMenus> <contextMenu idMso="ContextMenuCell"> <button id="change_cell_context" image="table_edit" label="Изменить свойства ячейки" onAction="CallTest" insertBeforeMso="Cut" /> </contextMenu> </contextMenus> </customUI>
добавлять его надо исключительно на вкладке 2010, 2013(customUI14.xml) внизу редактора Ribbon XML Editor. Обращаю внимание, что код создания собственной вкладки на панели дублируется: он должен присутствовать и в 2007(customUI.xml) и в 2010, 2013(customUI14.xml). Это необходимо сделать, чтобы в 2007 Excel была только вкладка, а начиная с 2010 — еще и контекстное меню(схемы customUI.xml и customUI14.xml обрабатываются отдельно друг от друга в зависимости от того, в какой версии открыт файл). При этом в 2007 это никаких ошибок не вызовет.
Остальные правила для создания элементов меню точно такие же, как и для вкладок: можно добавлять как собственные команды, так и встроенные(при помощи idMso).
Я сам предпочитаю контекстное меню дополнять исключительно кодом VBA, т.к. для 2007 его в любом случае придется писать.
Скачать пример надстройки для 2007 Excel
Надстройка для Excel 2007 и выше.zip (14,6 KiB, 3 402 скачиваний)
В примере я не стал делать много кнопок и их обработку — слишком уж много различных элементов там доступны и для раскрытия всего функционала этой статьи не хватит. Да и в интернете уже полно статей с разбором работы с XML-интерфейсом новых версий Excel. Основной упор сделан на создание основной вкладки и контекстного меню, т.к. техника создания контекстного меню уж очень не очевидна из надстройка Ribbon XML Editor.
Осталось дело за малым — научиться эти надстройки подключать. Но об этом я уже писал в статье Подключение/отключение надстроек
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
На чтение 31 мин. Просмотров 15.4k.
С помощью VBA вы можете создать пользовательскую функцию, которую можно использовать на листах точно так же, как обычные функции.
Это полезно, когда существующих функций Excel недостаточно. В таких случаях вы можете создать свою собственную пользовательскую функцию (UDF) для удовлетворения ваших конкретных потребностей.
В этом руководстве я расскажу о создании и использовании пользовательских функций в VBA.
Содержание
- Что такое функциональная процедура в VBA?
- Создание простой пользовательской функции в VBA
- Анатомия пользовательской функции в VBA
- Аргументы в пользовательской функции в VBA
- Создание функции, которая возвращает массив
- Понимание объема пользовательской функции в Excel
- Различные способы использования пользовательской функции в Excel
- Создание надстройки
- Сохранение функции в персональной книге макросов
- Ссылка на функцию из другой книги
- Использование оператора выхода из VBA
- Отладка пользовательской функции
- Встроенные функции Excel против Пользовательской функции VBA
- Где разместить код VBA для пользовательской функции
Что такое функциональная процедура в VBA?
Процедура Function — это код VBA, который выполняет вычисления и возвращает значение (или массив значений).
Используя процедуру Function, вы можете создать функцию, которую вы можете использовать на рабочем листе (как и любую обычную функцию Excel, такую как SUM или VLOOKUP).
Когда вы создали процедуру Function с использованием VBA, вы можете использовать ее тремя способами:
- В качестве формулы на рабочем листе, где она может принимать аргументы в качестве входных данных и возвращать значение или массив значений.
- Как часть кода вашей подпрограммы VBA или другого кода функции.
- В условном форматировании
Хотя на рабочем листе уже имеется более 450 встроенных функций Excel, вам может потребоваться настраиваемая функция, если:
- Встроенные функции не могут делать то, что вы хотите сделать. В этом случае вы можете создать пользовательскую функцию на основе ваших требований.
- Встроенные функции могут выполнять работу, но формула длинная и сложная. В этом случае вы можете создать пользовательскую функцию, которую легко читать и использовать
Обратите внимание, что пользовательские функции, созданные с использованием VBA, могут быть значительно медленнее, чем встроенные функции. Следовательно, они лучше всего подходят для ситуаций, когда вы не можете получить результат, используя встроенные функции.
Функция против Подпрограммы в VBA
«Подпрограмма» позволяет вам выполнять набор кода, в то время как «Функция» возвращает значение (или массив значений).
Например, если у вас есть список чисел (как положительных, так и отрицательных), и вы хотите идентифицировать отрицательные числа, вот что вы можете сделать с помощью функции и подпрограммы.
Подпрограмма может проходить через каждую ячейку в диапазоне и может выделять все ячейки, которые имеют отрицательное значение в ней. В этом случае подпрограмма завершает изменение свойств объекта диапазона (путем изменения цвета ячеек).
С пользовательской функцией вы можете использовать ее в отдельном столбце, и она может возвратить TRUE, если значение в ячейке отрицательное, и FALSE, если оно положительное. С помощью функции вы не можете изменять свойства объекта. Это означает, что вы не можете изменить цвет ячейки с помощью самой функции (однако вы можете сделать это, используя условное форматирование с пользовательской функцией).
Когда вы создаете пользовательскую функцию (UDF) с использованием VBA, вы можете использовать эту функцию на листе, как и любую другую функцию. Я расскажу об этом подробнее в разделе «Различные способы использования пользовательских функций в Excel».
Создание простой пользовательской функции в VBA
Позвольте мне создать простую пользовательскую функцию в VBA и показать вам, как она работает.
Приведенный ниже код создает функцию, которая извлекает числовые части из буквенно-цифровой строки.
Function GetNumeric(CellRef As String) as Long Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Next i GetNumeric = Result End Function
Если у вас есть вышеуказанный код в модуле, вы можете использовать эту функцию в рабочей книге.
Ниже показано, как эту функцию — GetNumeric — можно использовать в Excel.
Теперь, прежде чем я расскажу вам, как эта функция создается в VBA и как она работает, вам нужно знать несколько вещей:
- Когда вы создаете функцию в VBA, она становится доступной во всей книге, как и любая другая обычная функция.
- Когда вы вводите имя функции, за которым следует знак равенства, Excel покажет вам имя функции в списке совпадающих функций. В приведенном выше примере, когда я ввел = Get, Excel показал мне список, в котором была моя пользовательская функция.
Я считаю, что это хороший пример, когда вы можете использовать VBA для создания простой в использовании функции в Excel. Вы можете сделать то же самое с формулой (как показано в этом руководстве), но это становится сложным и трудным для понимания. С этим UDF вам нужно передать только один аргумент, и вы получите результат.
Анатомия пользовательской функции в VBA
В приведенном выше разделе я дал вам код и показал, как функция UDF работает на рабочем листе.
Теперь давайте углубимся и посмотрим, как создается эта функция. Вы должны поместить приведенный ниже код в модуль в VB Editor. Я рассматриваю эту тему в разделе «Где разместить код VBA для пользовательской функции».
Function GetNumeric(CellRef As String) as Long ' Эта функция извлекает числовую часть из строки Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If IsNumeric(Mid(CellRef, i, 1)) Then Result = Result & Mid(CellRef, i, 1) Next i GetNumeric = Result End Function
Первая строка кода начинается со слова «Функция».
Это слово говорит VBA, что наш код является функцией (а не подпрограммой). За словом Function следует имя функции — GetNumeric. Это имя, которое мы будем использовать на листе, чтобы использовать эту функцию.
- В имени функции не должно быть пробелов. Кроме того, вы не можете назвать функцию, если она конфликтует с именем ссылки на ячейку. Например, вы не можете назвать функцию ABC123, так как она также относится к ячейке на листе Excel.
- Вы не должны давать своей функции то же имя, что и у существующей функции. Если вы сделаете это, Excel будет отдавать предпочтение встроенной функции.
- Вы можете использовать подчеркивание, если хотите разделить слова. Например, Get_Numeric является допустимым именем
За именем функции следуют некоторые аргументы в скобках. Это аргументы, которые нужны нашей функции от пользователя. Это как аргументы, которые мы должны предоставить встроенным функциям Excel. Например, в функции COUNTIF есть два аргумента (диапазон и критерии).
В скобках необходимо указать аргументы.
В нашем примере есть только один аргумент — CellRef.
Также полезно указывать, какой аргумент ожидает функция. В этом примере, так как мы будем передавать функции ссылку на ячейку, мы можем указать аргумент как тип «Range». Если вы не укажете тип данных, VBA будет рассматривать его как вариант (что означает, что вы можете использовать любой тип данных).
Если у вас есть более одного аргумента, вы можете указать те же в круглых скобках — через запятую. Далее в этом руководстве мы увидим, как использовать несколько аргументов в пользовательской функции.
Обратите внимание, что функция указана как тип данных «String». Это сообщит VBA, что результат формулы будет иметь тип данных String.
Здесь я могу использовать числовой тип данных (например, Long или Double), но это ограничит диапазон возвращаемых чисел. Если у меня есть строка длиной 20 номеров, которую мне нужно извлечь из общей строки, объявление функции как Long или Double приведет к ошибке (так как число будет вне диапазона). Поэтому я сохранил тип выходных данных функции как String.
Вторая строка кода — зеленая, которая начинается с апострофа — это комментарий. При чтении кода VBA игнорирует эту строку. Вы можете использовать это, чтобы добавить описание или подробности о коде.
Третья строка кода объявляет переменную StringLength как тип данных Integer. Это переменная, в которой мы храним значение длины строки, которая анализируется по формуле.
В четвертой строке переменная Result объявляется как тип данных String. Это переменная, в которой мы будем извлекать числа из буквенно-цифровой строки.
Пятая строка назначает длину строки во входном аргументе переменной «StringLength». Обратите внимание, что «CellRef» относится к аргументу, который будет предоставлен пользователем при использовании формулы в рабочей таблице (или при использовании ее в VBA — которую мы увидим позже в этом руководстве).
Шестая, седьмая и восьмая строки являются частью цикла For Next. Цикл выполняется столько раз, сколько символов во входном аргументе. Этот номер задается функцией LEN и присваивается переменной «StringLength».
Таким образом, цикл проходит от «1 до Stringlength».
Внутри цикла оператор IF анализирует каждый символ строки и, если он числовой, добавляет этот числовой символ в переменную Result. Для этого он использует функцию MID в VBA.
Вторая последняя строка кода присваивает значение результата функции. Именно эта строка кода гарантирует, что функция вернет значение «Result» обратно в ячейку (откуда она вызывается).
Последняя строка кода — End Function. Это обязательная строка кода, которая сообщает VBA, что код функции заканчивается здесь.
Приведенный выше код объясняет различные части типичной пользовательской функции, созданной в VBA. В следующих разделах мы углубимся в эти элементы, а также увидим различные способы выполнения функции VBA в Excel.
Аргументы в пользовательской функции в VBA
В приведенных выше примерах, где мы создали пользовательскую функцию для получения числовой части из буквенно-цифровой строки (GetNumeric), функция была разработана для получения одного аргумента.
В этом разделе я расскажу, как создавать функции, не имеющие аргументов, для функций, которые принимают несколько аргументов (как обязательных, так и необязательных).
Создание функции в VBA без каких-либо аргументов
В листе Excel у нас есть несколько функций, которые не принимают аргументов (например, RAND, TODAY, NOW).
Эти функции не зависят от входных аргументов. Например, функция TODAY возвращает текущую дату, а функция RAND возвращает случайное число в диапазоне от 0 до 1.
Вы можете создать такую же функцию в VBA.
Ниже приведен код, который даст вам имя файла. Он не принимает никаких аргументов, так как результат, который нужно вернуть, не зависит ни от одного аргумента.
Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function
Приведенный выше код определяет результат функции как тип данных String (в качестве результата мы хотим получить имя файла, которое является строкой).
Эта функция присваивает функции значение «ThisWorkbook.Name», которое возвращается, когда функция используется на рабочем листе.
Если файл был сохранен, он возвращает имя с расширением файла, в противном случае он просто дает имя.
Выше есть одна проблема, хотя.
Если имя файла изменится, оно не будет автоматически обновлено. Обычно функция обновляется при изменении входных аргументов. Но поскольку в этой функции нет аргументов, функция не пересчитывает (даже если вы измените имя книги, закройте ее, а затем снова откройте).
При желании вы можете форсировать пересчет с помощью сочетания клавиш — Control + Alt + F9.
Чтобы формула пересчитывалась всякий раз, когда в рабочем листе есть изменения, вам нужна строка кода к ней.
Приведенный ниже код заставляет функцию пересчитывать всякий раз, когда происходит изменение в рабочем листе (как и в других аналогичных функциях рабочего листа, таких как функция TODAY или RAND).
Function WorkbookName() As String Application.Volatile True WorkbookName = ThisWorkbook.Name End Function
Теперь, если вы измените имя книги, эта функция будет обновляться всякий раз, когда будут какие-либо изменения в таблице, или когда вы снова откроете эту книгу.
Создание функции в VBA с одним аргументом
В одном из разделов выше мы уже видели, как создать функцию, которая принимает только один аргумент (функция GetNumeric, описанная выше).
Давайте создадим еще одну простую функцию, которая принимает только один аргумент.
Функция, созданная с помощью приведенного ниже кода, преобразует ссылочный текст в верхний регистр. Теперь у нас уже есть функция для этого в Excel, и эта функция просто показывает вам, как она работает. Если вам нужно сделать это, лучше использовать встроенную функцию UPPER.
Function ConvertToUpperCase(CellRef As Range) ConvertToUpperCase = UCase(CellRef) End Function
Эта функция использует функцию UCase в VBA для изменения значения переменной CellRef. Затем он присваивает значение функции ConvertToUpperCase.
Поскольку эта функция принимает аргумент, нам не нужно использовать здесь часть Application.Volatile. Как только аргумент изменится, функция автоматически обновится.
Создание функции в VBA с несколькими аргументами
Точно так же, как функции рабочего листа, вы можете создавать функции в VBA, которые принимают несколько аргументов.
Приведенный ниже код создаст функцию, которая будет извлекать текст перед указанным разделителем. Он принимает два аргумента — ссылку на ячейку с текстовой строкой и разделитель.
Function GetDataBeforeDelimiter(CellRef As Range, Delim As String) as String Dim Result As String Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 Result = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Result End Function
Когда вам нужно использовать более одного аргумента в пользовательской функции, вы можете иметь все аргументы в скобках, разделенные запятой.
Обратите внимание, что для каждого аргумента вы можете указать тип данных. В приведенном выше примере «CellRef» был объявлен как тип данных диапазона, а «Delim» был объявлен как тип данных String. Если вы не укажете какой-либо тип данных, VBA считает, что это вариант данных.
Когда вы используете вышеуказанную функцию на листе, вам нужно указать ссылку на ячейку, в которой в качестве первого аргумента указан текст, а в качестве двойного кавычка — символ (ы) в двойных кавычках.
Затем он проверяет положение разделителя с помощью функции INSTR в VBA. Эта позиция затем используется для извлечения всех символов перед разделителем (используя функцию LEFT).
Наконец, он присваивает результат функции.
Эта формула далека от совершенства. Например, если вы введете разделитель, который не найден в тексте, он выдаст ошибку. Теперь вы можете использовать функцию IFERROR на листе, чтобы избавиться от ошибок, или вы можете использовать приведенный ниже код, который возвращает весь текст, когда он не может найти разделитель.
Function GetDataBeforeDelimiter(CellRef As Range, Delim As String) as String Dim Result As String Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 If DelimPosition < 0 Then DelimPosition = Len(CellRef) Result = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Result End Function
Мы можем дополнительно оптимизировать эту функцию.
Если вы введете текст (из которого вы хотите извлечь часть перед разделителем) непосредственно в функции, это приведет к ошибке. Давай .. попробуй!
Это происходит, когда мы указали «CellRef» в качестве типа данных диапазона.
Или, если вы хотите, чтобы разделитель находился в ячейке и использовал ссылку на ячейку вместо жесткого кодирования в формуле, вы не можете сделать это с помощью приведенного выше кода. Это потому, что Delim был объявлен как строковый тип данных.
Если вы хотите, чтобы функция имела гибкость, позволяющую принимать прямой ввод текста или ссылки на ячейки от пользователя, вам необходимо удалить объявление типа данных. Это приведет к созданию аргумента в качестве альтернативного типа данных, который может принимать аргументы любого типа и обрабатывать их.
Код ниже сделает это:
Function GetDataBeforeDelimiter(CellRef, Delim) As String Dim Result As String Dim DelimPosition As Integer DelimPosition = InStr(1, CellRef, Delim, vbBinaryCompare) - 1 If DelimPosition < 0 Then DelimPosition = Len(CellRef) Result = Left(CellRef, DelimPosition) GetDataBeforeDelimiter = Result End Function
Создание функции в VBA с необязательными аргументами
В Excel есть много функций, некоторые из которых не являются обязательными.
Например, легендарная функция VLOOKUP имеет 3 обязательных аргумента и один необязательный аргумент.
Необязательный аргумент, как следует из названия, указывать необязательно. Если вы не укажете один из обязательных аргументов, ваша функция выдаст вам ошибку, но если вы не укажете необязательный аргумент, ваша функция будет работать.
Но необязательные аргументы не бесполезны. Они позволяют вам выбирать из целого ряда вариантов.
Например, в функции VLOOKUP, если вы не указали четвертый аргумент, VLOOKUP выполняет приблизительный поиск, а если вы указываете последний аргумент как FALSE (или 0), то он выполняет точное совпадение.
Помните, что необязательные аргументы всегда должны идти после всех обязательных аргументов. Вы не можете иметь дополнительные аргументы в начале.
Теперь давайте посмотрим, как создать функцию в VBA с необязательными аргументами.
Функция только с необязательным аргументом
Насколько я знаю, нет встроенной функции, которая принимает только необязательные аргументы (я могу ошибаться, но я не могу думать ни о какой такой функции).
Но мы можем создать один с VBA.
Ниже приведен код функции, которая выдаст вам текущую дату в формате dd-mm-yyyy, если вы не вводите никаких аргументов (т.е. оставьте это поле пустым), и в формате «dd mmmm, yyyy», если вы введете что-либо в качестве аргумента (т. е. что угодно, чтобы аргумент не был пустым).
Function CurrDate(Optional fmt As Variant) Dim Result If IsMissing(fmt) Then CurrDate = Format(Date, "dd-mm-yyyy") Else CurrDate = Format(Date, "dd mmmm, yyyy") End If End Function
Обратите внимание, что вышеупомянутая функция использует IsMissing, чтобы проверить, отсутствует аргумент или нет. Чтобы использовать функцию IsMissing, необязательный аргумент должен иметь вариантный тип данных.
Вышеуказанная функция работает независимо от того, что вы вводите в качестве аргумента. В коде мы только проверяем, указан ли необязательный аргумент или нет.
Вы можете сделать это более надежным, взяв только определенные значения в качестве аргументов и показывая ошибку в остальных случаях (как показано в приведенном ниже коде).
Function CurrDate(Optional fmt As Variant) Dim Result If IsMissing(fmt) Then CurrDate = Format(Date, "dd-mm-yyyy") ElseIf fmt = 1 Then CurrDate = Format(Date, "dd mmmm, yyyy") Else CurrDate = CVErr(xlErrValue) End If End Function
Приведенный выше код создает функцию, которая показывает дату в формате «дд-мм-гггг», если аргумент не указан, и в формате «дд мммм, гггг», если аргумент равен 1. Во всех других случаях выдается ошибка.
Функция с необходимыми и необязательными аргументами
Мы уже видели код, который извлекает числовую часть из строки.
Теперь давайте рассмотрим похожий пример, который принимает как обязательные, так и необязательные аргументы.
Приведенный ниже код создает функцию, которая извлекает текстовую часть из строки. Если необязательный аргумент равен TRUE, он дает результат в верхнем регистре, а если необязательный аргумент имеет значение FALSE или опущен, он дает результат как есть.
Function GetText(CellRef As Range, Optional TextCase = False) As String Dim StringLength As Integer Dim Result As String StringLength = Len(CellRef) For i = 1 To StringLength If Not (IsNumeric(Mid(CellRef, i, 1))) Then Result = Result & Mid(CellRef, i, 1) Next i If TextCase = True Then Result = UCase(Result) GetText = Result End Function
Обратите внимание, что в приведенном выше коде мы инициализировали значение «TextCase» как False (смотрите в скобках в первой строке).
Сделав это, мы убедились, что необязательный аргумент начинается со значения по умолчанию, то есть FALSE. Если пользователь указывает значение как ИСТИНА, функция возвращает текст в верхнем регистре, а если пользователь указывает необязательный аргумент как ЛОЖЬ или пропускает его, то возвращаемый текст остается как есть.
Создание функции в VBA с массивом в качестве аргумента
До сих пор мы видели примеры создания функции с необязательными / обязательными аргументами, где эти аргументы были одним значением.
Вы также можете создать функцию, которая может принимать массив в качестве аргумента. В функциях листа Excel есть много функций, которые принимают аргументы массива, такие как SUM, VLOOKUP, SUMIF, COUNTIF и т.д.
Ниже приведен код, который создает функцию, которая дает сумму всех четных чисел в указанном диапазоне ячеек.
Function AddEven(CellRef as Range) Dim Cell As Range For Each Cell In CellRef If IsNumeric(Cell.Value) Then If Cell.Value Mod 2 = 0 Then Result = Result + Cell.Value End If End If Next Cell AddEven = Result End Function
Вы можете использовать эту функцию на листе и указать диапазон ячеек, в которых в качестве аргумента используются числа. Функция будет возвращать одно значение — сумму всех четных чисел (как показано ниже).
В приведенной выше функции вместо одного значения мы предоставили массив (A1: A10). Чтобы это работало, вам нужно убедиться, что ваш тип данных аргумента может принимать массив.
В приведенном выше коде я указал аргумент CellRef как Range (который может принимать массив в качестве входных данных). Вы также можете использовать вариантный тип данных здесь.
В коде есть цикл For Each, который проходит через каждую ячейку и проверяет, является ли это число не. Если это не так, ничего не происходит, и он перемещается в следующую ячейку. Если это число, оно проверяет, является ли оно четным или нет (с помощью функции MOD).
В конце все четные числа добавляются, и сумма возвращается обратно в функцию.
Создание функции с неопределенным числом аргументов
При создании некоторых функций в VBA вы можете не знать точное количество аргументов, которые пользователь хочет предоставить. Поэтому необходимо создать функцию, которая может принимать столько аргументов, сколько необходимо, и использовать их для возврата результата.
Примером такой функции рабочего листа является функция SUM. Вы можете предоставить несколько аргументов (например, это):
= SUM (A1, A2: A4, B1: B20)
Вышеупомянутая функция добавит значения во все эти аргументы. Также обратите внимание, что это может быть одна ячейка или массив ячеек.
Вы можете создать такую функцию в VBA, указав последний аргумент (или единственный аргумент) в качестве необязательного. Кроме того, этому необязательному аргументу должно предшествовать ключевое слово «ParamArray».
ParamArray — это модификатор, который позволяет вам принимать столько аргументов, сколько вы хотите. Обратите внимание, что использование слова ParamArray перед аргументом делает аргумент необязательным. Однако вам не нужно использовать здесь слово «Необязательно».
Теперь давайте создадим функцию, которая может принимать произвольное количество аргументов и добавит все числа в указанные аргументы:
Function AddArguments(ParamArray arglist() As Variant) For Each arg In arglist AddArguments = AddArguments + arg Next arg End Function
Вышеприведенная функция может принимать любое количество аргументов и добавлять эти аргументы для получения результата.
Обратите внимание, что в качестве аргумента вы можете использовать только одно значение, ссылку на ячейку, логическое значение или выражение. Вы не можете предоставить массив в качестве аргумента. Например, если один из ваших аргументов — D8: D10, эта формула выдаст вам ошибку.
Если вы хотите использовать оба аргумента из нескольких ячеек, вам нужно использовать следующий код:
Function AddArguments(ParamArray arglist() As Variant) For Each arg In arglist For Each Cell In arg AddArguments = AddArguments + Cell Next Cell Next arg End Function
Обратите внимание, что эта формула работает с несколькими ячейками и ссылками на массивы, однако она не может обрабатывать жестко закодированные значения или выражения. Вы можете создать более надежную функцию, проверяя и обрабатывая эти условия, но это не является целью.
Цель здесь — показать вам, как работает ParamArray, чтобы вы могли разрешить неопределенное количество аргументов в функции. Если вам нужна функция лучше, чем та, которая была создана в приведенном выше коде, используйте функцию SUM на листе.
Создание функции, которая возвращает массив
До сих пор мы видели функции, которые возвращают одно значение.
С помощью VBA вы можете создать функцию, которая возвращает вариант, содержащий целый массив значений.
Формулы массивов также доступны в виде встроенных функций на листах Excel. Если вы знакомы с формулами массива в Excel, вы знаете, что они вводятся клавишами Control + Shift + Enter (а не только Enter). Вы можете прочитать больше о формулах массива здесь. Если вы не знаете формул массива, не беспокойтесь, продолжайте читать.
Давайте создадим формулу, которая возвращает массив из трех чисел (1,2,3).
Код ниже сделает это.
Function ThreeNumbers() As Variant Dim NumberValue(1 To 3) NumberValue(1) = 1 NumberValue(2) = 2 NumberValue(3) = 3 ThreeNumbers = NumberValue End Function
В приведенном выше коде мы указали функцию ThreeNumbers в качестве варианта. Это позволяет ему содержать массив значений.
Переменная NumberValue объявлена как массив из 3 элементов. Он содержит три значения и присваивает его функции «Три числа».
Вы можете использовать эту функцию на рабочем листе. Введите эту функцию и нажмите клавиши Control + Shift + Enter (удерживайте клавиши Control и Shift и затем нажмите Enter).
Когда вы сделаете это, он вернет 1 в ячейке, но в действительности он содержит все три значения. Чтобы проверить это, используйте следующую формулу:
= MAX (ThreeNumbers ())
Используйте вышеуказанную функцию с Control + Shift + Enter. Вы заметите, что теперь результат равен 3, так как это самые большие значения в массиве, возвращаемом функцией Max, которая получает три числа в результате нашей пользовательской функции — ThreeNumbers.
Вы можете использовать ту же технику для создания функции, которая возвращает массив названий месяцев, как показано в приведенном ниже коде:
Function Months() As Variant Dim MonthName(1 To 12) MonthName(1) = "Январь" MonthName(2) = "Февраль" MonthName(3) = "Март" MonthName(4) = "Апрель" MonthName(5) = "Май" MonthName(6) = "Июнь" MonthName(7) = "Июль" MonthName(8) = "Август" MonthName(9) = "Сентябрь" MonthName(10) = "Октябрь" MonthName(11) = "Ноябрь" MonthName(12) = "Декабрь" Months = MonthName End Function
Теперь, когда вы введете функцию = Months () на листе Excel и используете Control + Shift + Enter, она вернет весь массив названий месяцев. Обратите внимание, что вы видите только январь в ячейке, поскольку это первое значение в массиве. Это не означает, что массив возвращает только одно значение.
Чтобы показать вам тот факт, что он возвращает все значения, сделайте это — выберите ячейку с формулой, перейдите на панель формул, выберите всю формулу и нажмите F9. Это покажет вам все значения, которые возвращает функция.
Вы можете использовать это, используя приведенную ниже формулу INDEX, чтобы получить список всех названий месяцев за один раз.
=INDEX(Months(),ROW())
Теперь, если у вас много значений, не рекомендуется назначать эти значения одно за другим (как мы делали выше). Вместо этого вы можете использовать функцию Array в VBA.
Поэтому тот же код, в котором мы создаем функцию «Месяцы», станет короче, как показано ниже:
Function Months() As Variant Months = Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", _ "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь") End Function
Вышеупомянутая функция использует функцию Array для назначения значений непосредственно этой функции.
Обратите внимание, что все функции, созданные выше, возвращают горизонтальный массив значений. Это означает, что если вы выберете 12 горизонтальных ячеек (скажем, A1: L1) и введете формулу = Months () в ячейку A1, вы получите все названия месяцев.
Но что, если вы хотите эти значения в вертикальном диапазоне ячеек.
Вы можете сделать это, используя формулу TRANSPOSE на листе.
Просто выберите 12 вертикальных ячеек (смежные) и введите приведенную ниже формулу.
Функция может иметь две области действия — Public или Private.
- Общая область означает, что функция доступна для всех листов в рабочей книге, а также для всех процедур (вспомогательных и функциональных) во всех модулях в рабочей книге. Это полезно, когда вы хотите вызвать функцию из подпрограммы (мы увидим, как это делается в следующем разделе).
- Частная область означает, что функция доступна только в том модуле, в котором она существует. Вы не можете использовать его в других модулях. Вы также не увидите его в списке функций на рабочем листе. Например, если имя вашей функции — «Месяцы ()», и вы вводите функцию в Excel (после знака =), она не будет отображать вам имя функции. Однако вы все равно можете использовать его, если вводите название формулы
Если вы ничего не указали, функция по умолчанию является публичной.
Ниже приведена функция, которая является частной функцией:
Private Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function
Вы можете использовать эту функцию в подпрограммах и процедурах в тех же модулях, но не можете использовать ее в других модулях. Эта функция также не будет отображаться на листе.
Приведенный ниже код сделает эту функцию публичной. Это также будет отображаться на листе.
Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function
Различные способы использования пользовательской функции в Excel
Создав пользовательскую функцию в VBA, вы можете использовать ее по-разному.
Давайте сначала рассмотрим, как использовать функции на листе.
Использование пользовательских функций в рабочих листах
Мы уже видели примеры использования функции, созданной в VBA, на листе.
Все, что вам нужно сделать, это ввести имя функции, и оно отобразится в intellisense.
Обратите внимание, что для того, чтобы функция отображалась на рабочем листе, она должна быть функцией Public (как описано в разделе выше).
Вы также можете использовать диалоговое окно «Вставить функцию» для вставки пользовательской функции (используя шаги ниже). Это будет работать только для публичных функций.
- Перейдите на вкладку «Данные».
- Нажмите «Вставить функцию».
- В диалоговом окне «Вставка функции» выберите «Определено пользователем» в качестве категории. Эта опция отображается только тогда, когда у вас есть функция в редакторе VB (и функция Public).
- Выберите функцию из списка всех общедоступных пользовательских функций.
- Нажмите кнопку ОК
Вышеуказанные шаги вставят функцию в лист. Он также отображает диалоговое окно «Аргументы функции», которое предоставит вам подробную информацию об аргументах и результате.
Вы можете использовать пользовательскую функцию, как и любую другую функцию в Excel. Это также означает, что вы можете использовать его с другими встроенными функциями Excel. Например. приведенная ниже формула даст название рабочей книги в верхнем регистре:
=UPPER(WorkbookName())
Использование пользовательских функций в процедурах и функциях VBA
Когда вы создали функцию, вы можете использовать ее и в других подпроцедурах.
Если функция Public, она может использоваться в любой процедуре в том же или другом модуле. Если это Private, его можно использовать только в том же модуле.
Ниже приведена функция, которая возвращает имя рабочей книги.
Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function
Приведенная ниже процедура вызывает функцию, а затем отображает имя в окне сообщения.
Sub ShowWorkbookName() MsgBox WorkbookName End Sub
Вы также можете вызвать функцию из другой функции.
В приведенных ниже кодах первый код возвращает имя рабочей книги, а второй возвращает имя в верхнем регистре, вызывая первую функцию.
Function WorkbookName() As String WorkbookName = ThisWorkbook.Name End Function
Function WorkbookNameinUpper() WorkbookNameinUpper = UCase(WorkbookName) End Function
Вызов пользовательской функции из других книг
Если у вас есть функция в рабочей книге, вы можете вызвать эту функцию и в других рабочих книгах.
Есть несколько способов сделать это:
- Создание надстройки
- Функция сохранения в персональной макрокоманде
- Ссылка на функцию из другой рабочей книги.
Создание надстройки
Создав и установив надстройку, вы получите настраиваемую функцию, доступную во всех книгах.
Предположим, вы создали пользовательскую функцию — «GetNumeric» и хотите, чтобы она была во всех книгах. Для этого создайте новую рабочую книгу и поместите код функции в модуль этой новой рабочей книги.
Теперь следуйте инструкциям ниже, чтобы сохранить его как надстройку, а затем установить его в Excel.
- Перейдите на вкладку «Файл» и нажмите «Сохранить как».
- В диалоговом окне «Сохранить как» измените тип «Сохранить как» на .xlam. Имя, которое вы назначаете файлу, будет именем вашей надстройки. В этом примере файл сохраняется с именем GetNumeric.
- Вы заметите, что путь к файлу, в котором он сохраняется, автоматически изменяется. Вы можете использовать по умолчанию или изменить его, если хотите.
- Откройте новую книгу Excel и перейдите на вкладку Разработчик.
- Выберите параметр «Надстройки Excel».
- В диалоговом окне «Надстройки» найдите и найдите сохраненный файл и нажмите «ОК».
Теперь надстройка была активирована.
Теперь вы можете использовать пользовательские функции во всех книгах.
Сохранение функции в персональной книге макросов
Персональная книга макросов — это скрытая рабочая книга в вашей системе, которая открывается при каждом запуске приложения Excel.
Это место, где вы можете хранить макросы и получать к ним доступ из любой книги. Это отличное место для хранения тех макросов, которые вы хотите часто использовать.
По умолчанию в вашем Excel нет личной книги макросов. Вам необходимо создать его, записав макрос и сохранив его в личной книге макросов.
Ссылка на функцию из другой книги
Хотя первые два метода (создание надстройки и использование личной рабочей книги макроса) будут работать во всех ситуациях, если вы хотите сослаться на функцию из другой рабочей книги, эта рабочая книга должна быть открыта.
Предположим, у вас есть рабочая книга с именем «Рабочая тетрадь с формулой», и она имеет функцию с именем «GetNumeric».
Чтобы использовать эту функцию в другой рабочей книге (когда рабочая книга с формулой открыта), вы можете использовать следующую формулу:
=’Workbook with Formula’!GetNumeric(A1)
Приведенная выше формула будет использовать пользовательскую функцию в файле Workbook with Formula и даст вам результат.
Обратите внимание: поскольку в имени книги есть пробелы, его необходимо заключить в одинарные кавычки.
Использование оператора выхода из VBA
Если вы хотите выйти из функции во время выполнения кода, вы можете сделать это с помощью оператора «Выход из функции».
Приведенный ниже код извлекает первые три числовых символа из буквенно-цифровой текстовой строки. Как только он получает три символа, функция завершается и возвращает результат.
Function GetNumericFirstThree(CellRef As Range) As Long Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If J = 3 Then Exit Function If IsNumeric(Mid(CellRef, i, 1)) Then J = J + 1 Result = Result & Mid(CellRef, i, 1) GetNumericFirstThree = Result End If Next i End Function
Вышеприведенная функция проверяет количество числовых символов, и когда она получает 3 числовых символа, она выходит из функции в следующем цикле.
Отладка пользовательской функции
Есть несколько методов, которые вы можете использовать при отладке пользовательской функции в VBA:
Отладка пользовательской функции с помощью окна сообщения
Используйте функцию MsgBox, чтобы показать окно сообщения с определенным значением.
Отображаемое значение может быть основано на том, что вы хотите проверить. Например, если вы хотите проверить, выполняется ли код или нет, будет работать любое сообщение, и если вы хотите проверить, работают ли циклы или нет, вы можете отобразить определенное значение или счетчик цикла.
Отладка пользовательской функции путем установки точки останова
Установите точку останова, чтобы иметь возможность проходить шаг за шагом по каждой строке. Чтобы установить точку останова, выберите нужную строку и нажмите F9 или нажмите на серую вертикальную область, которая слева от строк кода. Любой из этих методов вставил бы точку останова (вы увидите красную точку в серой области).
Как только вы установили точку останова и выполнили функцию, она идет до линии точки останова и затем останавливается. Теперь вы можете просмотреть код с помощью клавиши F8. Нажмите F8 один раз, чтобы перейти к следующей строке в коде.
Отладка пользовательской функции с помощью Debug.Print в коде
Вы можете использовать оператор Debug.Print в своем коде, чтобы получить значения указанных переменных / аргументов в непосредственном окне.
Например, в приведенном ниже коде я использовал Debug.Print, чтобы получить значение двух переменных — «j» и «Result».
Function GetNumericFirstThree(CellRef As Range) As Long Dim StringLength As Integer StringLength = Len(CellRef) For i = 1 To StringLength If J = 3 Then Exit Function If IsNumeric(Mid(CellRef, i, 1)) Then J = J + 1 Result = Result & Mid(CellRef, i, 1) Debug.Print J, Result GetNumericFirstThree = Result End If Next i End Function
Когда этот код выполняется, он показывает следующее в immediate window.
Встроенные функции Excel против Пользовательской функции VBA
Есть несколько сильных преимуществ использования встроенных функций Excel по сравнению с пользовательскими функциями, созданными в VBA.
- Встроенные функции работают намного быстрее, чем функции VBA.
- Когда вы создаете отчет / панель мониторинга с использованием функций VBA и отправляете его клиенту / коллеге, им не нужно беспокоиться о том, включены макросы или нет. В некоторых случаях клиенты / клиенты пугаются, увидев предупреждение в желтой полосе (которое просто просит их включить макросы).
- Благодаря встроенным функциям Excel вам не нужно беспокоиться о расширениях файлов. Если у вас есть макросы или пользовательские функции в рабочей книге, вам нужно сохранить их в формате .xlsm
Хотя существует множество веских причин для использования встроенных функций Excel, в некоторых случаях лучше использовать пользовательскую функцию.
- Лучше использовать пользовательскую функцию, если ваша встроенная формула огромна и сложна. Это становится еще более актуальным, когда вам нужен кто-то еще, чтобы обновить формулы. Например, если у вас есть огромная формула, состоящая из множества различных функций, даже изменение ссылки на ячейку может быть утомительным и подверженным ошибкам. Вместо этого вы можете создать пользовательскую функцию, которая принимает только один или два аргумента и выполняет всю тяжелую работу с бэкэндом.
- Когда вам нужно что-то сделать, что не может быть сделано встроенными функциями Excel. Примером этого может быть случай, когда вы хотите извлечь все числовые символы из строки. В таких случаях польза от использования пользовательской функции gar перевешивает ее недостатки.
Где разместить код VBA для пользовательской функции
При создании пользовательской функции необходимо поместить код в окно кода для книги, в которой вы хотите использовать функцию.
Ниже приведены инструкции по размещению кода для функции «GetNumeric» в книге.
- Перейдите на вкладку Разработчик.
- Нажмите на Visual Basic. Это откроет редактор VB в бэкэнде.
- На панели Project Explorer в редакторе VB щелкните правой кнопкой мыши любой объект для книги, в которую вы хотите вставить код. Если вы не видите Project Explorer, перейдите на вкладку View и щелкните Project Explorer.
- Перейти к Вставить и нажмите на модуль. Это вставит объект модуля для вашей книги.
- Скопируйте и вставьте код в окно модуля.