Я ищу способ добавить настраиваемую вкладку на ленту Excel, на которой было бы несколько кнопок. Я случайно наткнулся на некоторые ресурсы, посвященные этой проблеме через Google, но все они выглядят хитроумно и невероятно сложно.
Как это сделать быстро и просто? Я бы хотел, чтобы новая вкладка загружалась, когда мой VBA загружается в Excel ..
ОБНОВЛЕНИЕ : Я пробовал этот пример отсюда, но получил ошибку «требуется объект» в последней инструкции:
Public Sub AddHighlightRibbon()
Dim ribbonXml As String
ribbonXml = "<mso:customUI xmlns:mso=""http://schemas.microsoft.com/office/2009/07/customui"">"
ribbonXml = ribbonXml + " <mso:ribbon>"
ribbonXml = ribbonXml + " <mso:qat/>"
ribbonXml = ribbonXml + " <mso:tabs>"
ribbonXml = ribbonXml + " <mso:tab id=""highlightTab"" label=""Highlight"" insertBeforeQ=""mso:TabFormat"">"
ribbonXml = ribbonXml + " <mso:group id=""testGroup"" label=""Test"" autoScale=""true"">"
ribbonXml = ribbonXml + " <mso:button id=""highlightManualTasks"" label=""Toggle Manual Task Color"" "
ribbonXml = ribbonXml + "imageMso=""DiagramTargetInsertClassic"" onAction=""ToggleManualTasksColor""/>"
ribbonXml = ribbonXml + " </mso:group>"
ribbonXml = ribbonXml + " </mso:tab>"
ribbonXml = ribbonXml + " </mso:tabs>"
ribbonXml = ribbonXml + " </mso:ribbon>"
ribbonXml = ribbonXml + "</mso:customUI>"
ActiveProject.SetCustomUI (ribbonXml)
End Sub
excel
vba
excel-2007
ribbonx
BuZz
источник
источник
Ответы:
AFAIK вы не можете использовать VBA Excel для создания настраиваемой вкладки на ленте Excel. Однако вы можете скрыть / сделать видимым компонент ленты с помощью VBA. Кроме того, ссылка, которую вы упомянули выше, предназначена для MS Project, а не для MS Excel.
Я создаю вкладки для своих приложений / надстроек Excel с помощью этой бесплатной утилиты под названием Custom UI Editor .
Изменить: для размещения нового запроса OP
Руководство
Вот краткое руководство, как и было обещано:
После того, как вы установили Custom UI Editor (CUIE), откройте его и нажмите File | Откройте и выберите соответствующий файл Excel. Убедитесь, что файл Excel закрыт, прежде чем открывать его через CUIE. В качестве примера я использую новый рабочий лист.
Щелкните правой кнопкой мыши, как показано на изображении ниже, и выберите «Пользовательский интерфейс Office 2007». Он вставит "customUI.xml"
Далее Щелкните меню Вставить | Образец XML | Пользовательская вкладка. Вы заметите, что основной код создается автоматически. Теперь вы готовы отредактировать его в соответствии с вашими требованиями.
Давайте проверим код
label="Custom Tab"
: Замените «Custom Tab» на имя, которое вы хотите дать своей вкладке. А пока назовем его «Джером».В приведенной ниже части добавлена пользовательская кнопка.
imageMso
: Это изображение, которое будет отображаться на кнопке. «HappyFace» - это то, что вы увидите сейчас. Вы можете скачать больше идентификаторов изображений здесь .onAction="Callback"
: «Обратный вызов» - это имя процедуры, которая запускается при нажатии на кнопку.Демо
Теперь давайте создадим 2 кнопки и назовем их «Кнопка JG 1» и «Кнопка JG 2». Сохраним счастливое лицо как изображение первого, а «Солнце» оставим на втором. Измененный код теперь выглядит так:
Удалите весь код, созданный в CUIE, а затем вставьте вместо него приведенный выше код. Сохраните и закройте CUIE. Теперь, когда вы откроете файл Excel, он будет выглядеть так:
Теперь кодовая часть. Откройте редактор VBA, вставьте модуль и вставьте этот код:
Сохраните файл Excel как файл с поддержкой макросов. Теперь, когда вы нажмете на Смайлик или Солнце, вы увидите соответствующее окно сообщения:
Надеюсь это поможет!
источник
Мне удалось добиться этого с помощью VBA в Excel 2013. Никаких специальных редакторов не требуется. Все, что вам нужно, это редактор кода Visual Basic, доступ к которому можно получить на вкладке Разработчик. Вкладка «Разработчик» по умолчанию не отображается, поэтому ее необходимо включить в меню «Файл»> «Параметры»> «Настроить ленту». На вкладке Разработчик нажмите кнопку Visual Basic. Редактор кода запустится. Щелкните правой кнопкой мыши на панели Project Explorer слева. Щелкните меню вставки и выберите модуль. Добавьте оба подпрограммы ниже в новый модуль.
Вызов подпрограммы LoadCustRibbon в Wookbook open even и вызов подпрограммы ClearCustRibbon в событии Before_Close файла кода ThisWorkbook.
источник
Я боролся как сумасшедший, но на самом деле это правильный ответ. Как бы то ни было, я пропустил следующее:
Кстати, страница, которая объясняет это на сайте Рона, теперь находится по адресу http://www.rondebruin.nl/win/s2/win002.htm.
А вот его пример того, как вы включаете / отключаете кнопки на ленте http://www.rondebruin.nl/win/s2/win013.htm
Другие примеры лент в формате xml см. Также на странице http://msdn.microsoft.com/en-us/library/office/aa338202%28v=office.12%29.aspx
источник
Ответы здесь относятся к использованию настраиваемого редактора пользовательского интерфейса. Я потратил некоторое время на создание интерфейса без этой замечательной программы, поэтому я документирую решение здесь, чтобы помочь всем остальным решить, нужен ли им этот пользовательский редактор пользовательского интерфейса или нет.
Я наткнулся на следующую веб-страницу справки Microsoft - https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Здесь показано, как настроить интерфейс вручную, но у меня возникли некоторые проблемы, когда я указал на свой собственный код надстройки.
Чтобы кнопки работали с вашими настраиваемыми макросами, настройте макрос в подпрограммах .xlam, который будет вызываться, как описано в этом ответе SO - Вызов макроса Excel с ленты . По сути, вам нужно добавить этот параметр «control As IRibbonControl» к любому модулю, указанному на вашей ленте xml. Кроме того, ваш XML-файл ленты должен иметь синтаксис onAction = "myaddin! Mymodule.mysub" для правильного вызова любых модулей, загруженных добавлением.
Используя эти инструкции, я смог создать надстройку Excel (файл .xlam), в которой загружается настраиваемая вкладка, когда мой VBA загружается в Excel вместе с надстройкой. Кнопки выполняют код из надстройки, а настраиваемая вкладка удаляется, когда Убираю надстройку.
источник
В дополнение к ответу Рой-Чи Брайанта этот код полностью работает в Excel 2010. Нажмите ALT + F11, и появится редактор VBA. Дважды щелкните
ThisWorkbook
слева, затем вставьте этот код:Не забудьте сохранить и снова открыть книгу. Надеюсь это поможет!
источник
Я столкнулся с трудностями с решением Roi-Kyi Bryant, когда несколько надстроек пытались изменить ленту. У меня также нет прав администратора на моем рабочем компьютере, что исключает установку
Custom UI Editor
. Итак, если вы находитесь в одной лодке со мной, вот альтернативный пример настройки ленты с использованием только Excel. Обратите внимание, мое решение взято из руководства Microsoft ..xlam
файлаChart Tools.xlam
иPriveleged UDFs.xlam
, чтобы продемонстрировать, как несколько надстроек могут взаимодействовать с лентой.customUI
и_rels
папки.customUI
папки создайтеcustomUI.xml
файл. ВcustomUI.xml
файле подробно описано, как файлы Excel взаимодействуют с лентой. Часть 2 руководства Microsoft описывает элементы вcustomUI.xml
файле.Мой
customUI.xml
файлChart Tools.xlam
выглядит такМой
customUI.xml
файлPriveleged UDFs.xlam
выглядит так.zip
к имени файла. В моем случае я переименовалChart Tools.xlam
вChart Tools.xlam.zip
иPrivelged UDFs.xlam
вPriveleged UDFs.xlam.zip
..zip
файл и перейдите к_rels
папке. Скопируйте.rels
файл в_rels
папку, созданную на шаге 3. Отредактируйте каждый.rels
файл в текстовом редакторе. Из руководства MicrosoftМой
.rels
файлChart Tools.xlam
выглядит такМой
.rels
файл дляPriveleged UDFs
выглядит так..rels
файлы в каждом.zip
файле на.rels
файл / файлы, которые вы изменили на предыдущем шаге..customUI
созданную вами папку в домашний каталог.zip
файла / files..zip
расширение файла из созданных вами файлов Excel ..xlam
файлы, вернитесь в Excel и добавьте их в свои надстройки Excel.onAction
мои кнопки содержат ключевые слова.onAction
Ключевое слово указывает на то, что, когда содержание элемента запускается приложение Excel вызовет подпрограмму , заключенная в кавычки непосредственно послеonAction
ключевого слова. Это называется обратным вызовом . В моих.xlam
файлах есть модуль с именем, вCallBacks
который я включил подпрограммы обратного вызова.Мой
CallBacks
модульChart Tools.xlam
выглядит такМой
CallBacks
модульPriveleged UDFs.xlam
выглядит такВариант Явный
У разных элементов разная подпрограмма обратного вызова. Для кнопок обязательный параметр подпрограммы
ByRef control As IRibbonControl
. Если вы не соответствуете требуемой подписи обратного вызова, вы получите сообщение об ошибке при компиляции проекта / проектов VBA. В части 3 руководства Microsoft определены все сигнатуры обратных вызовов.Вот как выглядит мой готовый пример
Некоторые заключительные советы
idQ
иxlmns:
ключевое слово. В моем примере,Chart Tools.xlam
иPriveleged UDFs.xlam
оба имеют доступ к элементам сidQ
равнымиx:chartToolsTab
иx:privelgedUDFsTab
. Чтобы это работало,x:
требуется, и я определил его пространство имен в первой строке моегоcustomUI.xml
файла<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
. Раздел два способ Настройки интерфейса Fluent в руководстве Microsoft дает некоторые дополнительные детали.isMSO
ключевое слово. Раздел два способ Настройки интерфейса Fluent в руководстве Microsoft дает некоторые дополнительные детали.источник
Другой способ - загрузить бесплатный модуль класса Open XML Яна Карела Питерсе с этой страницы: Редактирование элементов в файле OpenXML с помощью VBA
Добавив это в свой проект VBA, вы можете распаковать файл Excel, использовать VBA для изменения XML, а затем использовать класс для повторного сжатия файлов.
источник