Включение доступа к VBA для создания или открытия Инструменты Visual Studio для проекта системы Microsoft Office
Область применения:Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Перед созданием или открытием Инструменты Visual Studio для проекта Microsoft Office необходимо явно включить доступ к системе проектов Visual Basic для приложений (VBA).
Для проектов разработки Microsoft Office требуется доступ к системе проектов Visual Basic для приложений (VBA) в Microsoft Office Word и Microsoft Office Excel, даже если проекты не используют Visual Basic для приложений. Поддержка элементов управления времени разработки в проектах Visual Basic и C# зависит от системы проектов Visual Basic для приложений.
Некоторые макровирусы Microsoft Office пытаются автоматизировать систему проектов Visual Basic для приложений как способ своего распространения. Разрешая доступ к системе проектов Visual Basic для приложений, вы отключаете средство защиты, которое позволяет предотвратить распространение макровирусов. Тем не менее, остаются стандартные средства обеспечения безопасности макросов: уровень безопасности макросов и список надежных издателей, поддерживаемый для приложений Office, помогут выявить выполнение макросов на компьютере.
Это касается только компьютера разработки. Компьютеры конечных пользователей не нуждаются в этом параметре для запуска решений Office.
Важно отметить, что отключение доступа к системе проектов Visual Basic для приложений само по себе не защитит вас от вирусов, оно просто помогает предотвратить распространение некоторых вирусов в другие документы в случае заражения компьютера макровирусом. Эта возможность отключена по умолчанию, что обеспечивает дополнительный уровень защиты компьютера. Однако ее включение не делает ваш компьютер более подверженным атакам, если вы выполняете рекомендации по обеспечению безопасности.
Лучшая защита от вирусов макросов Office — запуск Office на высоком или очень высоком уровне безопасности, только доверять макросам из проверенных, известных источников и поддерживать актуальность с помощью исправлений безопасности и сканеров вирусов.
Вы можете включить или отключить параметр Trust Access to Visual Basic Project вручную.
При появлении ошибок VBA или COM можно восстановить установку Office.
Заинтересованы в разработке решений, которые расширяют возможности Office на нескольких платформах? Ознакомьтесь с новой моделью надстроек Office. Надстройки Office имеют небольшое пространство по сравнению с надстройками и решениями VSTO, и вы можете создавать их практически с помощью любой технологии веб-программирования, таких как HTML5, JavaScript, CSS3 и XML.
Включение или отключение доступа к проектам Visual Basic
- Перейдите на вкладку Файл .
- Щелкните Параметры.
- Щелкните Центр управления безопасностью и щелкните центр управления безопасностью Параметры.
- В Центре управления безопасностью щелкните макрос Параметры.
- Проверьте или не проверка Доверять доступу к объектной модели проекта VBA, чтобы включить или отключить доступ к проектам Visual Basic.
- Щелкните OK.
Включение или отключение доступа к проектам Visual Basic с помощью системы Microsoft Office 2007
- В меню «Сервис» в Word или Excel наведите указатель мыши на макрос и нажмите кнопку «Безопасность«.
- В диалоговом окне «Безопасность» откройте вкладку «Доверенные издатели«.
- Выберите, чтобы включить или очистить, чтобы отключить, trust Access to Visual Basic Project.
- Щелкните OK.
Настройка уровня безопасности макросов в Office
- Перейдите на вкладку Файл .
- Щелкните Параметры.
- Щелкните Центр управления безопасностью и щелкните центр управления безопасностью Параметры.
- В Центре управления безопасностью щелкните макрос Параметры.
- В разделе «Макрос Параметры» выберите нужный параметр.
- Щелкните OK.
Настройка уровня безопасности макросов Office с помощью системы Microsoft Office 2007
- В меню «Сервис» в Word или Excel наведите указатель мыши на макрос и нажмите кнопку «Безопасность«.
- На вкладке «Уровень безопасности» выберите нужный параметр. Вкладка «Уровень безопасности» содержит сведения о каждом уровне. Дополнительные сведения см. в разделе «Уровни безопасности макросов» справки Microsoft Office.
Установка VBA в выпуске 2007 системы Microsoft Office
- В панель управления запустите команду «Добавить или удалить программы» или «Программы и компоненты«.
- Выберите Office в списке установленных программ .
- Щелкните Изменить.
- Выберите » Добавить или удалить компоненты» и нажмите кнопку «Продолжить«.
- Нажмите кнопку «Выбрать расширенную настройку приложений» и нажмите кнопку «Далее«.
- Разверните общие функции Office в списке «Выбор параметров обновления» для приложений и инструментов.
- Откройте раскрывающееся меню рядом с Visual Basic для приложений и нажмите кнопку «Запустить с моего компьютера«.
- Нажмите кнопку Продолжить.
- Нажмите кнопку Закрыть.
Восстановление установки Office
- В панель управления запустите команду «Добавить или удалить программы» или «Программы и компоненты«.
- Выберите свою версию Office в списке установленных программ .
- Щелкните Изменить.
- Выберите «Переустановить » или «Восстановить«, а затем нажмите кнопку «Далее«.
- Выберите » Обнаружить и восстановить ошибки» в моей установке Office и нажмите кнопку «Установить«.
См. также
Как импортировать модуль с макросом на свой компьютер?
Если Вы еще не знаете что представляет из себя редактор Visual Basic и как он выглядит, рекомендую ознакомиться со статьями «Что такое VBE? Как запустить редактор VB, что такое макрорекордер», а также «Копирование, вставка и последующее сохранение кода макроса в модуль редактора VB на своем ПК». Если же Вы уже знакомы с редактором, идем дальше!
Если Вы не знаете как перенести макрос с одного компьютера на другой, либо скачали из интернета файл с расширением .bas, то знайте – это экспортированный из редактора VB файл модуля, в котором содержится программный код макроса. Этот файл можно импортировать в свой редактор, сохранив тем самым макрос на свой компьютер.
Как Вам уже известно, редактор VB представляет из себя многопанельную среду. В окне редактора VBA, как правило, отображается область разработки, панель свойств объектов и панель проектов, которая нам и понадобится для осуществления импорта файла.
Итак, для импорта файла, содержащего код макроса и имеющего расширение .bas последовательно осуществляем несколько шагов:
1. Находим и переносим на жесткий диск своего компьютера файл с расширением .bas;
2. Открываем на своем компьютере редактор Visual Basic (Alt+F11), выбираем существующий проект;
3. Кликаем на нем правой кнопкой мыши и выбираем пункт «Import File»;

4. Находим место расположения файла с расширением .bas, выбираем его и жмем кнопку «Открыть», после чего модуль с программным кодом макроса появляется в вашем редакторе VB.
В случае, если модулей несколько, то необходимо проделать вышеописанные шаги для каждого модуля.
Если Вам необходимо перенести макрос со своего компьютера на какой-то другой, действуем аналогичным образом, только используем уже пункт контекстного меню «Export File…». Для удаления модуля используется команда «Remove». Если вдруг после импорта модуля макрос не запускается, то внимательно читаем статью «Что делать если макрос не работает?».
Другие материалы по теме:
- Состав MS Office
- Что такое VBA? Что такое макросы VBA? Что такое надстройки?
- Создание и написание макросов. Как установить макрос на свой компьютер?
- Как записать макрос макрорекордером? Как запустить макрос в Word и Excel?
- Как сохранить программный код макроса? Что такое модули?
VBA Excel. Модуль, процедура, форма
Самый простой способ перейти в редактор VBA — при активном окне программы Excel нажать сочетание клавиш Alt+F11 (здесь используется левая клавиша Alt). Это сочетание работает во всех версиях программы. Если в открывшемся окне нет слева окна проводника «Project-VBAProject», вызовите его через главное меню, выбрав «View» — «Project Explorer». Внутренние окна в редакторе VBA можно перетаскивать и размещать в других местах главного окна.
Типы модулей VBA Excel
Модули рабочей книги Excel представляют из себя файлы, предназначенные для создания и хранения программного кода в виде процедур (подпрограмм, функций и пользовательских свойств). Модули бывают нескольких типов: стандартные модули и модули классов (рабочих книг, рабочих листов, диаграмм, пользовательских форм).
Стандартный модуль
Стандартный модуль представляет из себя отдельный файл, встроенный в рабочую книгу Excel и принадлежащий всему проекту VBA (VBAProject) со всеми его объектами (ThisWorkbook, Worksheets, Charts, UserForms). Стандартный модуль можно экспортировать, импортировать или удалить. Его публичные процедуры с уникальными именами доступны во всех остальных модулях рабочей книги без дополнительной адресации. Для публичных процедур с неуникальными именами требуется указание имени модуля, из которого они вызываются.
Создание стандартного модуля:
- Откройте рабочую книгу Excel, в которую планируете добавить новый стандартный модуль, или создайте новую книгу в учебных целях.
- Откройте редактор VBA сочетанием клавиш Alt+F11.
- В окне редактора VBA нажмите на пункт меню «Insert» и в открывшемся списке выберите «Module».
Таким образом, вы создали новый стандартный модуль. В проводнике справа появилась папка «Modules» и в ней файл «Module1» (или «Module» с другим номером, если в вашей книге модули уже были). Такие же модули создаются при записи макросов встроенным рекордером.
Открыть или перейти в окно открытого стандартного модуля можно, дважды кликнув по его имени в проводнике, или открыв на нем правой кнопкой мыши контекстное меню и выбрав «View Code». Кроме того, все уже открытые модули доступны во вкладке «Window» главного меню.
Важное примечание: в Excel 2007-2016 книги с программными модулями сохраняются как «Книга Excel с поддержкой макросов (.xlsm)». Если вы добавили модуль в книгу «Книга Excel (.xlsx)», то, при ее сохранении или закрытии, программа Excel предложит сохранить ее как «Книга Excel с поддержкой макросов (.xlsm)», иначе изменения (созданные или импортированные модули) не сохранятся.
Модули классов
К модулям классов относятся модули книг, рабочих листов, диаграмм и пользовательских форм.
Модуль книги
Модуль книги принадлежит только объекту Workbook (Рабочая книга). Открыть или перейти в окно открытого модуля книги можно, дважды кликнув в проводнике на пункте «ЭтаКнига», или открыв на нем правой кнопкой мыши контекстное меню и выбрав «View Code». Кроме того, открытый модуль доступен во вкладке «Window» главного меню.
Модуль листа
Модуль листа принадлежит только объекту Worksheet (Рабочий лист). Открыть модуль листа можно, дважды кликнув в проводнике по его имени, или открыв на нем правой кнопкой мыши контекстное меню и выбрав «View Code». Кроме того, перейти в модуль листа можно из рабочей книги, кликнув правой кнопкой мыши по ярлыку этого листа и выбрав в контекстном меню «Просмотреть код». Открытый модуль доступен во вкладке «Window» главного меню.
Модуль диаграммы
Модуль диаграммы принадлежит только объекту Chart (Диаграмма, вынесенная на отдельный лист рабочей книги). Открыть его можно так же, как и модуль рабочего листа.
Модуль формы
Модуль формы принадлежит только объекту UserForm (Пользовательская форма). Откройте редактор VBA сочетанием клавиш Alt+F11 и нажмите на пункт меню «Insert». В открывшемся списке выберите «UserForm». Таким образом вы создадите новую пользовательскую форму «UserForm1». В проводнике справа появилась папка «Forms» и в ней файл «UserForm1». Перейти в модуль формы можно, дважды кликнув по самой форме, или кликнув по имени формы в проводнике правой кнопкой мыши и выбрав в контекстном меню «View Code». Кроме того, открытый модуль доступен во вкладке «Window» главного меню.
Стандартных модулей в одной книге можно создать любое количество, модуль книги только один, модулей листов или форм только по одному для каждого экземпляра листа или формы.
Между открытыми окнами форм и модулей можно переходить, нажав в главном меню вкладку «Window», где перечислены все открытые модули и формы (активный объект отмечен галочкой).
Процедура
Процедуры VBA Excel, размещаемые в любом модуле, подразделяются на 3 типа:
- Sub (подпрограмма),
- Function (функция),
- Property (пользовательские свойства).
Главное отличие функции от подпрограммы заключается в том, что функция возвращает результат вычислений, а подпрограмма — нет. Процедура Property предназначена для создания пользовательских свойств и управления ими (используется не часто).
В редакторе VBA Excel перейдите в стандартный модуль и нажмите на пункт меню «Insert». В открывшемся списке выберите «Procedure…». Появится окно с предложением ввести название процедуры, выбрать тип и зону видимости. Создайте пару процедур с разной зоной видимости, пусть одна будет Sub, а другая — Function. В промежутке между началом и концом процедуры пишется программный код.
Создание пользовательских функций в Excel
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Еще. Меньше
Хотя в Excel предлагается большое число встроенных функций, в нем может не быть той функции, которая нужна для ваших вычислений. К сожалению, разработчики Excel не могли предугадать все потребности пользователей. Однако в Excel можно создавать собственные функции, и ниже вы найдете все нужные для этого инструкции.
Создание простой пользовательской функции
Пользовательские функции (как и макросы) записываются на языке программирования Visual Basic для приложений (VBA). Они отличаются от макросов двумя вещами. Во-первых, в них используются процедуры Function, а не Sub. Это значит, что они начинаются с оператора Function, а не Sub, и заканчиваются оператором End Function, а не End Sub. Во-вторых, они выполняют различные вычисления, а не действия. Некоторые операторы (например, предназначенные для выбора и форматирования диапазонов) исключаются из пользовательских функций. Из этой статьи вы узнаете, как создавать и применять пользовательские функции. Для создания функций и макросов используется редактор Visual Basic (VBE), который открывается в отдельном окне.
Предположим, что ваша компания предоставляет скидку в размере 10 % клиентам, заказавшим более 100 единиц товара. Ниже мы объясним, как создать функцию для расчета такой скидки.
В примере ниже показана форма заказа, в которой перечислены товары, их количество и цена, скидка (если она предоставляется) и итоговая стоимость.

Чтобы создать пользовательскую функцию DISCOUNT в этой книге, сделайте следующее:
- Нажмите клавиши ALT+F11 (или FN+ALT+F11 на Mac), чтобы открыть редактор Visual Basic, а затем щелкните Insert (Вставка) >Module (Модуль). В правой части редактора Visual Basic появится окно нового модуля.
- Скопируйте указанный ниже код и вставьте его в новый модуль.
Function DISCOUNT(quantity, price) If quantity >=100 Then DISCOUNT = quantity * price * 0.1 Else DISCOUNT = 0 End If DISCOUNT = Application.Round(Discount, 2) End Function
Примечание: Чтобы код было более удобно читать, можно добавлять отступы строк с помощью клавиши TAB. Отступы необязательны и не влияют на выполнение кода. Если добавить отступ, редактор Visual Basic автоматически вставит его и для следующей строки. Чтобы сдвинуть строку на один знак табуляции влево, нажмите SHIFT+TAB.
Применение пользовательских функций
Теперь вы готовы использовать новую функцию DISCOUNT. Закройте редактор Visual Basic, выделите ячейку G7 и введите следующий код:
=DISCOUNT(D7;E7)
Excel вычислит 10%-ю скидку для 200 единиц по цене 47,50 ₽ и вернет 950,00 ₽.
В первой строке кода VBA функция DISCOUNT(quantity, price) указывает, что функции DISCOUNT требуется два аргумента: quantity (количество) и price (цена). При вызове функции в ячейке листа необходимо указать эти два аргумента. В формуле =DISCOUNT(D7;E7) аргумент quantity имеет значение D7, а аргумент price — значение E7. Если скопировать формулу в ячейки G8:G13, вы получите указанные ниже результаты.
Рассмотрим, как Excel обрабатывает эту функцию. При нажатии клавиши ВВОД Excel ищет имя DISCOUNT в текущей книге и определяет, что это пользовательская функция в модуле VBA. Имена аргументов, заключенные в скобки (quantity и price), представляют собой заполнители для значений, на основе которых вычисляется скидка.

Оператор If в следующем блоке кода проверяет аргумент quantity и сравнивает количество проданных товаров со значением 100:
If quantity >= 100 Then DISCOUNT = quantity * price * 0.1 Else DISCOUNT = 0 End If
Если количество проданных товаров не меньше 100, VBA выполняет следующую инструкцию, которая перемножает значения quantity и price, а затем умножает результат на 0,1:
Discount = quantity * price * 0.1
Результат хранится в виде переменной Discount. Оператор VBA, который хранит значение в переменной, называется оператором назначения, так как он вычисляет выражение справа от знака равенства и назначает результат имени переменной слева от него. Так как переменная Discount называется так же, как и процедура функции, значение, хранящееся в переменной, возвращается в формулу листа, из которой была вызвана функция DISCOUNT.
Если значение quantity меньше 100, VBA выполняет следующий оператор:
Наконец, следующий оператор округляет значение, назначенное переменной Discount, до двух дробных разрядов:
Discount = Application.Round(Discount, 2)
В VBA нет функции округления, но она есть в Excel. Чтобы использовать округление в этом операторе, необходимо указать VBA, что метод (функцию) Round следует искать в объекте Application (Excel). Для этого добавьте слово Application перед словом Round. Используйте этот синтаксис каждый раз, когда нужно получить доступ к функции Excel из модуля VBA.
Правила создания пользовательских функций
Пользовательские функции должны начинаться с оператора Function и заканчиваться оператором End Function. Помимо названия функции, оператор Function обычно включает один или несколько аргументов. Однако вы можете создать функцию без аргументов. В Excel доступно несколько встроенных функций (например, СЛЧИС и ТДАТА), в которых нет аргументов.
После оператора Function указывается один или несколько операторов VBA, которые проверят соответствия условиям и выполняют вычисления с использованием аргументов, переданных функции. Наконец, в процедуру функции следует включить оператор, назначающий значение переменной с тем же именем, что у функции. Это значение возвращается в формулу, которая вызывает функцию.
Применение ключевых слов VBA в пользовательских функциях
Количество ключевых слов VBA, которые можно использовать в пользовательских функциях, меньше числа, используемого в макросах. Настраиваемые функции не могут выполнять другие задачи, кроме возврата значения в формулу на этом или в выражение, используемом в другом макросе или функции VBA. Например, пользовательские функции не могут изменять размер окна, редактировать формулу в ячейке, а также изменять шрифт, цвет или узор текста в ячейке. Если в процедуру функции включить такой код действия, функция возвращает #VALUE! ошибку «#ВЫЧИС!».
Единственное действие, которое может выполнять процедура функции (кроме вычислений), — это отображение диалогового окна. Чтобы получить значение от пользователя, выполняющего функцию, можно использовать в ней оператор InputBox. Кроме того, с помощью оператора MsgBox можно выводить сведения для пользователей. Вы также можете использовать настраиваемые диалоговые окна (UserForms), но эта тема выходит за рамки данной статьи.
Документирование макросов и пользовательских функций
Даже простые макросы и пользовательские функции может быть сложно понять. Чтобы сделать эту задачу проще, добавьте комментарии с пояснениями. Для этого нужно ввести перед текстом апостроф. Например, ниже показана функция DISCOUNT с комментариями. Благодаря подобным комментариями и вам, и другим будет впоследствии проще работать с кодом VBA. Так, код будет легче понять, если потребуется внести в него изменения.

Апостроф указывает приложению Excel на то, что следует игнорировать всю строку справа от него, поэтому вы можете добавлять комментарии в отдельных строках или в правой части строк, содержащих код VBA. Советуем начинать длинный блок кода с комментария, в котором объясняется его назначение, а затем использовать встроенные комментарии для документирования отдельных операторов.
Кроме того, рекомендуется присваивать макросам и пользовательским функциям описательные имена. Например, присвойте макросу название MonthLabels вместо Labels, чтобы более точно указать его назначение. Описательные имена макросов и пользовательских функций особенно полезны, если существует множество процедур с похожим назначением.
То, как документировать макрос и пользовательские функции, имеет личный выбор. Важно принятия определенного способа документации и его согласованного использования.
Предоставление доступа к пользовательским функциям
Для использования настраиваемой функции должна быть открыта книга, содержащая модуль, в котором она была создана. Если книга не открыта, вы получите #NAME? при попытке использования функции. Если вы ссылались на функцию в другой книге, ее имя должно предшествовать названию книги, в которой она находится. Например, при создании функции DISCOUNT в книге Personal.xlsb и вызове ее из другой книги необходимо ввести =personal.xlsb!discount(),а не просто =discount().
Чтобы вставить пользовательскую функцию быстрее (и избежать ошибок), ее можно выбрать в диалоговом окне «Вставка функции». Пользовательские функции доступны в категории «Определенные пользователем»:
Чтобы пользовательские функции всегда были доступны, можно хранить их в отдельной книге, а затем сохранять в качестве надстройки. Затем надстройку можно сделать доступной при запуске Excel. Вот как это сделать:
- Создав нужные функции, выберите Файл >Сохранить как. В Excel 2007 нажмите кнопку Microsoft Office, а затем щелкните Сохранить как.
- В диалоговом окне Сохранить как откройте раскрывающийся список Тип файла и выберите значение Надстройка Excel. Сохраните книгу с запоминающимся именем, таким как MyFunctions, в папке AddIns. Она будет автоматически предложена в диалоговом окне Сохранить как, поэтому вам потребуется только принять расположение, используемое по умолчанию.
- Сохранив книгу, выберите Файл >Параметры Excel. В Excel 2007 нажмите кнопку Microsoft Office и щелкните Параметры Excel.
- В диалоговом окне Параметры Excel выберите категорию Надстройки.
- В раскрывающемся списке Управление выберите Надстройки Excel. Затем нажмите кнопку Перейти.
- В диалоговом окне Надстройки установите флажок рядом с именем книги, как показано ниже.
- Создав нужные функции, выберите Файл >Сохранить как.
- В диалоговом окне Сохранить как откройте раскрывающийся список Тип файла и выберите значение Надстройка Excel. Сохраните книгу с запоминающимся именем, таким как MyFunctions.
- Сохранив книгу, выберите Сервис >Надстройки Excel.
- В диалоговом окне Надстройки нажмите кнопку «Обзор», найдите свою надстройку, нажмите кнопку Открыть, а затем установите флажок рядом с надстройкой в поле Доступные надстройки.
После этого пользовательские функции будут доступны при каждом запуске Excel. Если вы хотите добавить его в библиотеку функций, вернимся в Visual Basic редактора. Если вы заглянуть в Visual Basic редактора Project проводника под заголовком VBAProject, вы увидите модуль с именем файла надстройки. У надстройки будет расширение XLAM.
Дважды щелкните модуль в Project Explorer, чтобы вывести код функций. Чтобы добавить новую функцию, установите точку вставки после оператора End Function, который завершает последнюю функцию в окне кода, и начните ввод. Вы можете создать любое количество функций, и они будут всегда доступны в категории «Определенные пользователем» диалогового окна Вставка функции.
Об авторах
Эта статья основана на главе книги Microsoft Office Excel 2007 Inside Out, написанной Марком Доджем (Mark Dodge) и Крейгом Стинсоном (Craig Stinson). В нее были добавлены сведения, относящиеся к более поздним версиям Excel.
Дополнительные сведения
Вы всегда можете задать вопрос эксперту в Excel Tech Community или получить поддержку в сообществах.
