Как добавить настраиваемую вкладку ленты с помощью VBA?
Я ищу способ добавить настраиваемую вкладку на ленту Excel, на которой было бы несколько кнопок. Я случайно наткнулся на некоторые ресурсы, посвященные этой проблеме через Google, но все они выглядят хитроумно и невероятно сложно.
Как это сделать быстро и просто? Я бы хотел, чтобы новая вкладка загружалась, когда мой VBA загружается в Excel ..
ОБНОВЛЕНИЕ : Я пробовал этот пример отсюда, но получил ошибку «требуется объект» в последней инструкции:
AFAIK вы не можете использовать VBA Excel для создания настраиваемой вкладки на ленте Excel. Однако вы можете скрыть / сделать видимым компонент ленты с помощью VBA. Кроме того, ссылка, которую вы упомянули выше, предназначена для MS Project, а не для MS Excel.
Я создаю вкладки для своих приложений / надстроек Excel с помощью этой бесплатной утилиты под названием Custom UI Editor .
Руководство
После того, как вы установили 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 как файл с поддержкой макросов. Теперь, когда вы нажмете на Смайлик или Солнце, вы увидите соответствующее окно сообщения:
Вы хотите создать новую вкладку? Если да, то предоставьте более подробную информацию, и я дам вам XML-код 
@SiddharthRout +1 — Я обнаружил, что мне не нужны никакие книги по Excel, просто следите за вашими постами, чтобы узнать, что мне нужно выучить за дневную работу (а сегодня вечером это XML-лента!) 
Я бы порекомендовал создать новый quesiton с базовым xml-кодом и кодом VBA, а затем мы можем взять его там? @YasserKhalil
Вызов подпрограммы LoadCustRibbon в Wookbook open even и вызов подпрограммы ClearCustRibbon в событии Before_Close файла кода ThisWorkbook.
Это сработало для меня, но только с парой мелких проблем, с которыми я столкнулся. 1) Если я оставил событие Before_Close, новая лента не загрузилась. 2) Когда мне удалось заставить ленту работать, удалив событие Before_Close, мне пришлось повторно загрузить Excel, прежде чем оно появилось. Если бы вы могли посоветовать, почему это происходит, было бы здорово!
Код точно такой же? Вы можете опубликовать это? Идея состоит в том, что Excel должен изменить стандартный файл ленты перед загрузкой ленты и сбросить его перед закрытием книги. Необходимо сбросить настройки ленты, чтобы она не отображалась в других книгах.
@WizzleWuzzle Это не обязательно. Ленту можно импортировать и преобразовать в объект, по которому можно перемещаться. Затем к объекту могут быть добавлены новые элементы. Результат можно сохранить в файл. Вопрос был в том, как создать собственную ленту; не как изменить существующий.
@ Roi-Kyi-Bryant Вопрос состоял в том, чтобы добавить настраиваемый элемент ленты, а не перезаписывать всю текущую настраиваемую ленту. Этот код перезаписывает текущую ленту.
Я боролся как сумасшедший, но на самом деле это правильный ответ. Как бы то ни было, я пропустил следующее:
Кстати, страница, которая объясняет это на сайте Рона, теперь находится по адресу http://www.rondebruin.nl/win/s2/win002.htm.
А вот его пример того, как вы включаете / отключаете кнопки на ленте http://www.rondebruin.nl/win/s2/win013.htm
Тем не менее (5 лет спустя) лучший ответ, на мой взгляд, и, возможно, OP @BuZz хотел бы обновить исходное сообщение, по крайней мере, указав на этот ответ (?). Я его еле нашел, так как он лежал внизу довольно длинного списка ответов.
Ответы здесь относятся к использованию настраиваемого редактора пользовательского интерфейса. Я потратил некоторое время на создание интерфейса без этой замечательной программы, поэтому я документирую решение здесь, чтобы помочь всем остальным решить, нужен ли им этот пользовательский редактор пользовательского интерфейса или нет.
Я наткнулся на следующую веб-страницу справки Microsoft — https://msdn.microsoft.com/en-us/library/office/ff861787.aspx . Здесь показано, как настроить интерфейс вручную, но у меня возникли некоторые проблемы, когда я указал на свой собственный код надстройки.
Используя эти инструкции, я смог создать надстройку Excel (файл .xlam), в которой загружается настраиваемая вкладка, когда мой VBA загружается в Excel вместе с надстройкой. Кнопки выполняют код из надстройки, а настраиваемая вкладка удаляется, когда Убираю надстройку.
VBA Excel заполнить ListBox несколькими столбцами — CodeRoad
Вместо функции Array можно использовать переменные одномерных и двухмерных массивов. При загрузке значений из двухмерного массива, требуется предварительно указать количество столбцов в комбинированном списке.





