Не работает надстройка в excel
Файл надстройки (с расширением .XLA) - обычная книга Excel, только со скрытыми листами,
и запускается также, как и любой другой файл Excel - двойным щелчком мыши на нём.
ВАЖНО: с 2016 года, после очередного обновления Excel, перед запуском скачанного файла надстройки, необходимо выполнить следующее:
- найти скачанный файл надстройки в папке (обычно это папка «Загрузки»)
- щелкнуть правой кнопкой мыши на файле - Свойства - Разблокировать - ОК
- и только после этого запускать
Это связано с недавним изменением политики безопасности в приложениях Office (скачанные из интернета файлы с макросами, не будучи предварительно разблокированными, запускаются без макросов)
Если вы хотите, чтобы надстройка запускалась автоматически при каждом запуске Excel,
то выберите один из 2 способов: (оба способа одновременно не используйте!)
- Включите автозапуск в опциях программы.
Для этого, на панели инструментов надстройки, нажмите кнопку «О программе», и на появившейся форме, на вкладке «ОПЦИИ», поставьте галочку «Запускать надстройку автоматически вместе с Excel» - Подключите надстройку через меню Excel.
В Excel 2003 это пункт меню «Сервис» - «Надстройки . », в Excel 2007-2016 это делается через «Параметры Excel» - «Надстройки» - пункт Надстройки Excel - кнопка «Перейти»
Комментарии
Евгений, в программе такой опции не предусмотрено, но вы можете в своей книге вставить гиперссылку на файл надстройки, чтобы запускать её одним кликом.
Здравствуйте! Есть ли возможность автоматически запускать надстройку не при старте эксель, а лишь с определенной книгой? Спасибо!
Напишите мне в скайп, попробую помочь
>Здравствуйте! Не могу запустить в своем 2007 exel никакие надстройки. с вашего сайта и не только. Макросы все разрешил, как у вас в соседней статье написано. Все равно в ленте не появляются "Надстройки"
<
Я тоже не могу запустить. Другие надстройки работают.
Денис, какие еще СМС? Про какую программу речь?
Здравствуйте, скажите пожалуйста почему смс постоянно находятся на модерации и не отправляются ? Заранее спасибо за ответ.
Александр, так обратитесь к разработчику надстройки Inquire, и спросите.
Я откуда могу знать, почему там что слетает, - это не моё творение.
Добрый день!
у меня надстройка Inquire слетает каждый раз при перезапуске Excel. другие надстройки работают нормально, сделал Разблокировать на файликах. Почему так может быть? Спасибо
Константин, если у вас включено автообновление Windows / Office, найдите обновление от 12 июля с названием типа «Security Update Microsoft Office 2010», и отмените его, - тогда все заработает.
Здравствуйте! Не могу запустить в своем 2007 exel никакие надстройки. с вашего сайта и не только. Макросы все разрешил, как у вас в соседней статье написано. Все равно в ленте не появляются "Надстройки"
ЧТО ТАКОЕ НАДСТРОЙКА
Для начала разберемся - что такое надстройка и для чего она нужна.
Надстройка - это файл Excel, имеющий расширение .xla или .xlam(только для 2007 и выше), который по умолчанию открывается как скрытая рабочая книга и может быть подключен к приложению для автоматического запуска вместе с запуском самого приложения. Книга надстройки открывается, но в списке видимых открытых файлов не значится, поэтому нет смысла её там искать. Отобразить такую книгу возможно только кодом.
Есть также и другие виды надстроек - надстройки COM и XLL-надстройки. Но о них я не буду рассказывать, т.к. они разрабатываются не в VBA, а в иных средах программирования
Как правило надстройки используют для распространения программного кода, который будет доступен для любой книги Excel. Т.к. надстройка запускается вместе с приложением - очень удобно хранить в ней коды. Можно создать меню для запуска процедур(об этом ниже) и функции пользователя - созданные в надстройке они доступны в любой открытой книге Excel без ссылок на другую книгу, что несомненно очень удобно. Функции пользователя, прописанные в надстройке для Excel 2007 и выше так же доступны по вводимым начальным символам:
и после нажатия TAB имя функции будет вставлено в ячейку.
Кроме модулей с кодами надстройки могут содержать и таблицы данных и диаграммы и все, что можно хранить в обычной книге. Но учитывая то, что книга скрыта - особого смысла в этих данных нет, если только не предполагается использовать эти данные в качестве шаблонов для создания определенных отчетов из надстройки. Часто на листах надстроек хранят константы для работы кода, если по каким-либо причинам не хочется использовать константы внутри кода VBA. Данные в ячейках файла надстройки можно изменять во время работы, но я не рекомендую сохранять открытый и исполняемый в данный момент файл надстройки, во избежание конфликтов.
КАК СОЗДАТЬ НАДСТРОЙКУ
Создать надстройку просто: из любого файла Excel идете в меню:
- Excel 2010-2013 : Файл (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 , но это не очень удобно в разработке).
Так же следует заранее выбрать формат надстройки - для версий Excel 97-2003(.xla) и или только от 2007(.xlam) и выше. Надстройки .xla работают во всех версиях Excel, в том числе и в 2007 и выше. Это, пожалуй, единственное их преимущество перед форматом .xlam. Т.к. при этом все меню, которые будут созданы для вызова кодов, в версиях от 2007 и выше будут располагаться на вкладке "Надстройки" и будут иметь минимум настроек: нет возможности изменить размер значка; разбить на группы; сделать красивые подсказки; расположить в два ряда и т.п.
Для формата .xlam доступен более широкий ассортимент: они могут так же создать меню на вкладке "Надстройки", а могут и создавать собственные вкладки(через XML-схемы), команды на которых можно расположить в соответствии со всеми красивостями и достоинствами оформления, которое можно наблюдать в Ribbon-панелях Excel 2007 и выше.
Дальше я как раз более подробно расскажу про оба метода создания меню.
Я покажу создание надстроек на примере простого кода, который будет записывать в активную ячейку текущего листа число 10, закрасит ячейку красным цветом и установит для ячейки границы.
Код этой процедуры:
Код помещается в стандартный модуль книги, из которой хотите сделать надстройку.
СОЗДАНИЕ СОБСТВЕННОГО МЕНЮ НАДСТРОЙКИ ДЛЯ ВЕРСИЙ EXCEL 2003
Примерный вид данного меню в Excel 2003:
Примерный вид меню в Excel 2007 и выше:
Собственно, меню, совместимое со всеми версиями Excel делается исключительно на уровне VBA следующим кодом:
Основные моменты я постарался расписать в комментариях, но на некоторых все же хочу заострить внимание.
-
Свойство Type
.Controls.Add(Type:=1)
Наверное, самое важное свойство. Оно отвечает за тип элемента меню. Доступно всего пять типов:
- 1 - Button(обычная кнопка)
- 2 - TextBox(текстовое поле с возможностью записи в него значений и считывания значений из него)
- 3 - List(выпадающий список с заранее заданным списком значений)
- 4 - ComboBox(выпадающий список с возможностью записи в поле произвольного значения)
- 10 - PopupMenu(выпадающее меню с возможностью добавления новых элементов)
Иногда возникает вопрос: как сделать на такой панели ToggleButton? Т.е. кнопку, которая при нажатии остается в нажатом состоянии, а при повторном нажатии - в отжатом(т.е. в обычном). В данном случае это возможно исключительно через "финты" вызываемой по нажатию кнопки процедуры:
Еще одна проблема при разработке таких панелей: невозможность явно указать кнопку в стиле Caption(т.е. неактивную к нажатию кнопку). Это тоже можно сделать при помощи обычной Button, только в свойствах кнопки надо свойство Enabled установить в False:
.Enabled = False
при этом обязательно необходимо указать Style 2 и назначить Caption.
- 1 - только значок(16x16). Необходимо указывать свойство FaceID
- 2 - только текст. Свойство FaceId может быть указано, но никак не влияет на внешний вид кнопки
- 3 - картинка и текст. Обязательно указывать хотя бы одно из свойств: Caption или FaceID
Во вложении ниже пример надстройки с открытым кодом. Но в примере код расширен - там я привел коды с использованием всех типов элементов: и кнопки, и эмуляция ToggleButton, и списки, и текстбокс и выпадающее меню с доп.кнопками. В кодах есть комментарии, поэтому при желании разобраться не составит труда.
Так же можно при запуске надстройки добавлять в контекстное меню(меню, появляющееся по правому клику мыши на ячейке) свои команды. По сути мало что меняется, кроме пары вещей:
При этом добавить можно как собственные кнопки, так и уже существующие. Для примера добавим одной кнопкой дубль нашей команды с лены "ИЗМЕНИТЬ СВОЙСТВА АТИВНОЙ ЯЧЕЙКИ", а второй - вставку в ячейку только значений(встроенная команда - подробнее в статье: Как удалить в ячейке формулу, оставив значения?):
СОЗДАНИЕ СОБСТВЕННОГО МЕНЮ НАДСТРОЙКИ ДЛЯ ВЕРСИЙ EXCEL 2007
Как я уже писал - для Excel 2007 и выше подходит описанный выше метод создания собственного меню для ранних версий. Однако меню в данном случае помещается исключительно на вкладку "Надстройки" и имеет довольно убогий вид (как можно лицезреть выше) в сравнении с общим Ribbon-интерфейсом других панелей. Чтобы посмотреть как это выглядит можете просто скачать файл выше и запустить его. Появится вкладка "Надстройки" с одной кнопкой.
Однако учитывая появившуюся в 2007 версии офиса возможность кастомизировать ленту Ribbon через язык XML, гораздо практичнее(особенно для разработчиков) создавать собственную панель с отдельным именем, на которой можно разместить красиво команды, добавить свои собственные значки для команд без особых усилий.
Примерно так можно все это оформить:
Чтобы добавить свою панель необходимо изменить XML-схему для надстройки, которая присутствует в любом файле формата 2007. Есть несколько методов(я опишу лишь два).
Первый метод , он же совсем неудобный и требует навыков работы с XML
Но все это очень муторно и необходимо знать язык XML. Уверен, большая часть читающих статью уже 100500 раз нахмурили брови и пару раз перечитали, надеясь понять о чем речь. Поэтому не будем дальше разбирать этот метод и перейдем к следующему.
Id каждого элемента должно быть уникальным и предпочтительнее указывать его исключительно на латинице(англ.алфавит), т.к. кириллица распознается с трудом и есть шанс получить ошибку.
Теперь продолжаем добавлять свойства для button:
4. для начала подгружаем картинку через соответствующую кнопку.
5. После этого она будет в выпадающем списке правее.
6. Ставим курсор после "cahnge_cell" и нажимаем кнопку вставки тега изображения. Вставляется тег и название. Теперь у нашей кнопки есть картинка.
7. При помощи выпадающего меню параметров выбираем label и вставляем данный тег кнопкой, расположенной правее выпадающего списка. Курсор автоматически будет помещен внутрь кавычек. Вписываем текст - Изменить свойства ячейки.
8. При помощи выпадающего списка функций обратного вызова выбираем onAction и так же вставляем. Вписываем туда имя вызываемой процедуры - CallTest.
В результате должно получиться:
На этом, казалось бы, все. Но нет. Просто так, сама по себе 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:
Сам код при этом будет выглядеть так:
Естественно, на создании одних кнопок функционал лент Ribbon не ограничивается. Доступны почти все элементы(вып.меню, галереи, большие иконки(32х32) и т.д.), которые есть в стандартных вкладках. Если чуть потренироваться и поэкспериментировать с приложением RibbonXMLEditor - то вскоре вы сможете быстро и легко создавать красивые и функциональные приложения. Как пример таких приложений можете посмотреть описание к моей надстройке MulTEx.
Так же как и в случае с надстройками для 2003 Excel, здесь можно создавать кнопки в контекстном меню(правая кнопка мыши), но и тут не обошлось без нюансов:
- изменение данного меню доступно только начиная с версии Excel 2010. Для 2007 версии придется использовать старые методы - те же, что и для 2003(т.е. внедрение отдельного кода на Workbook_Open надстройки, как в примере выше для надстройки 2003)
- в надстройке Ribbon XML Editor я не нашел встроенного инструмента для вставки кодов обработки меню правой кнопкой мыши. Похожий по "звучанию" contextualTabs не совсем то, что нужно(а если быть точнее - совсем не то). contextualTabs - это динамические вкладки, которые появляются после основных вкладок при работе с определенными объектами. Например, с умными таблицами. Когда выделяем умную таблицу или любую ячейку в ней, то появляется группа динамических вкладок "Работа с таблицами". Вот в неё и вносятся изменения при помощи contextualTabs
Поэтому прописывать "добавки" в меню по правой кнопке мыши придется самостоятельно. Код вставки уже имеющегося у нас кода приведен ниже:
добавлять его надо исключительно на вкладке 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 его в любом случае придется писать.
Надстройка для Excel 2007 и выше.zip (14,6 KiB, 3 187 скачиваний)
В примере я не стал делать много кнопок и их обработку - слишком уж много различных элементов там доступны и для раскрытия всего функционала этой статьи не хватит. Да и в интернете уже полно статей с разбором работы с XML-интерфейсом новых версий Excel. Основной упор сделан на создание основной вкладки и контекстного меню, т.к. техника создания контекстного меню уж очень не очевидна из надстройка Ribbon XML Editor.
Осталось дело за малым - научиться эти надстройки подключать. Но об этом я уже писал в статье Подключение/отключение надстроек
Вариант 1
Отключить в Excel защищенный просмотр для файлов из Интернета
Файл (File) -Параметры (Options) -Центр управления безопасностью (Trust Centr) -Параметры центра управления безопасностью (Trust Centr Settings) -Защищенный просмотр(Protected View) -снять флажок с Включить защищенный просмотр для для файлов из Интернета (Enable Protected View for files originating from the Internet)
Надо понимать, что сработает только если надстройки были скачаны с интернета. Хотя обновление безопасности итак только для таких файлов запрет ставит.
Вариант 2
Добавить папку с нужной надстройкой/надстройками в Надежные расположения
Файл (File) -Параметры (Options) -Центр управления безопасностью (Trust Centr) -Параметры центра управления безопасностью (Trust Centr Settings) -Надежные расположения (Trusted Locations) -Добавить новое расположение (Add new location) . В диалоговом окне выбрать папку, в которой хранится файл надстройки. Можно поставить галочку Так же доверять всем вложенным папкам (Subfolders of this location are also trusted) , если это необходимо(например, если у вас одна папка с надстройками, но надстройки поделены на категории и каждая в своей подпапке).
Убедиться, что галочка Отключить все надежные расположения отключена (Disable All Trusted Locations) .
Эти два варианта не рекомендуется самим Microsoft, т.к. потенциально снижают безопасность. Хотя для второго пункта очевидно, что надо просто не кидать в надежные расположения все файлы подряд.
Вариант 3
Разблокировать файл
- полностью закрыть Excel(все файлы и приложение целиком)
- перейти в папку с нужной надстройкой и найти там файл надстройки
- правая кнопка мыши по файлу -Свойства. На вкладке Общие нажать кнопку Разблокировать(так же это может быть флажок блокировки - тогда его надо снять)
- нажать кнопку Применить -OK
Проделать действие со всеми нужными файлами надстроек.
Вариант 4
Небольшой финт , за который отдельное спасибо Захарову Владимиру, известному на форумах под ником ZVI
- полностью закрыть Excel(все файлы и приложение целиком)
- перейти в папку с нужной надстройкой и найти там файл надстройки
- запаковать в ZIP или RAR архив файл надстройки, удалить саму надстройку и затем извлечь из архива файл надстройки обратно в ту же папку
Вариант 5
Еще один финт , за который опять же спасибо Захарову Владимиру(ZVI)
Есть несколько причин, по которым панель инструментов может не появиться в Excel на вкладке НАДСТРОЙКИ
Причина : вы забыли разблокировать надстройку после скачивания с сайта
Когда может случиться: при первом запуске скачанной надстройки
Решение проблемы : перед запуском скачанного файла надстройки, необходимо:
- найти скачанный файл надстройки в папке (обычно это папка «Загрузки»)
- щелкнуть правой кнопкой мыши на файле - Свойства- ставим галочку Разблокировать- ОК
- и только после этого запускать
Это связано с недавним изменением политики безопасности в приложениях Office (скачанные из интернета файлы с макросами, не будучи предварительно разблокированными, запускаются без макросов)
Причина : антивирус повредил файл надстройки при проверке
ЭТО НАИБОЛЕЕ ЧАСТО ВСТРЕЧАЮЩАЯСЯ ПРОБЛЕМА В 2018 - 2020 ГОДАХ
Даже если вам кажется, что у вас нет антивируса, наверняка он есть, — например, встроенный в систему Защитник Windows (он же Windows Defender)
Когда может случиться: в любой момент. чаще всего, это происходит при скачивании файла с сайта
ВАЖНО: убедитесь, что антивирус никак не реагирует на скачивание и запуск надстройки.
Если какое-то предупреждение от антивируса выскочило — с вероятностью 90%, антивирус повредил файл надстройки, и надстройка не запустится.
Причина : в настройках безопасности Excel заданы ограничения
Когда может случиться: в новых версиях Office такое иногда имеет место быть
Решение проблемы : нажимаем в меню Excel Файл — Параметры — Центр управления безопасностью, и потом справа кнопку Параметры центра управления безопасностью . .
В появившемся окне в левом столбце есть пункты Надёжные расположения и Надёжные документы.
По очереди заходим в каждый из этих разделов, и ставим галочки «Отключить все надёжные расположения» и «Отключить надёжные документы».
Теперь закрываем Excel, и пробуем снова запустить надстройку.
После этого Excel не будет считать надстройку ненадежной, только потому что она расположена не в той папке.
Причина : надстройка не запустилась вместе с Excel
Когда может случиться: при повторных запусках (когда до этого всё работало)
Решение проблемы : убедитесь, что надстройка запущена. Для этого, найдите файл надстройки в папке, и запустите его двойным щелчком.
Если надстройка запускается автоматически (включена опция автозапуска в О программе — Опции), убедитесь, что вы не перемещали и не переименовывали файл надстройки.
Причина : макросы в Excel отключены в режиме «без уведомлений»
Excel просто молча отключает все макросы во всех файлах.
Когда может случиться: при первом запуске скачанной надстройки
Встречается очень редко. По умолчению, макросы отключены «с уведомлением», т.е. Excel спрашивает, нужно ли включить макросы для каждого запускаемого файла с макросами.
Решение проблемы : нужно включить макросы в Excel
Нажимаем в меню Excel Файл — Параметры — Центр управления безопасностью, и потом справа кнопку Параметры центра управления безопасностью . .
В появившемся окне в левом столбце выбираем пункт Параметры макросов, и справа выбираем опцию «Включить все макросы»
Читайте также: