Vba excel вкладка на ленте

I encountered difficulties with Roi-Kyi Bryant’s solution when multiple add-ins tried to modify the ribbon. I also don’t have admin access on my work-computer, which ruled out installing the Custom UI Editor. So, if you’re in the same boat as me, here’s an alternative example to customising the ribbon using only Excel. Note, my solution is derived from the Microsoft guide.


  1. Create Excel file/files whose ribbons you want to customise. In my case, I’ve created two .xlam files, Chart Tools.xlam and Priveleged UDFs.xlam, to demonstrate how multiple add-ins can interact with the Ribbon.
  2. Create a folder, with any folder name, for each file you just created.
  3. Inside each of the folders you’ve created, add a customUI and _rels folder.
  4. Inside each customUI folder, create a customUI.xml file. The customUI.xml file details how Excel files interact with the ribbon. Part 2 of the Microsoft guide covers the elements in the customUI.xml file.

My customUI.xml file for Chart Tools.xlam looks like this

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
  <ribbon>
    <tabs>
      <tab idQ="x:chartToolsTab" label="Chart Tools">
        <group id="relativeChartMovementGroup" label="Relative Chart Movement" >
            <button id="moveChartWithRelativeLinksButton" label="Copy and Move" imageMso="ResultsPaneStartFindAndReplace" onAction="MoveChartWithRelativeLinksCallBack" visible="true" size="normal"/>
            <button id="moveChartToManySheetsWithRelativeLinksButton" label="Copy and Distribute" imageMso="OutlineDemoteToBodyText" onAction="MoveChartToManySheetsWithRelativeLinksCallBack" visible="true" size="normal"/>
        </group >
        <group id="chartDeletionGroup" label="Chart Deletion">
            <button id="deleteAllChartsInWorkbookSharingAnAddressButton" label="Delete Charts" imageMso="CancelRequest" onAction="DeleteAllChartsInWorkbookSharingAnAddressCallBack" visible="true" size="normal"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

My customUI.xml file for Priveleged UDFs.xlam looks like this

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">
  <ribbon>
    <tabs>
      <tab idQ="x:privelgedUDFsTab" label="Privelged UDFs">
        <group id="privelgedUDFsGroup" label="Toggle" >
            <button id="initialisePrivelegedUDFsButton" label="Activate" imageMso="TagMarkComplete" onAction="InitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
            <button id="deInitialisePrivelegedUDFsButton" label="De-Activate" imageMso="CancelRequest" onAction="DeInitialisePrivelegedUDFsCallBack" visible="true" size="normal"/>
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>
  1. For each file you created in Step 1, suffix a .zip to their file name. In my case, I renamed Chart Tools.xlam to Chart Tools.xlam.zip, and Privelged UDFs.xlam to Priveleged UDFs.xlam.zip.
  2. Open each .zip file, and navigate to the _rels folder. Copy the .rels file to the _rels folder you created in Step 3. Edit each .rels file with a text editor. From the Microsoft guide

Between the final <Relationship> element and the closing
<Relationships> element, add a line that creates a relationship
between the document file and the customization file. Ensure that you
specify the folder and file names correctly.

<Relationship Type="http://schemas.microsoft.com/office/2006/
  relationships/ui/extensibility" Target="/customUI/customUI.xml" 
  Id="customUIRelID" />

My .rels file for Chart Tools.xlam looks like this

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
        <Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="chartToolsCustomUIRel" />
    </Relationships>

My .rels file for Priveleged UDFs looks like this.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
        <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
        <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
        <Relationship Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" Id="privelegedUDFsCustomUIRel" />
    </Relationships>
  1. Replace the .rels files in each .zip file with the .rels file/files you modified in the previous step.
  2. Copy and paste the .customUI folder you created into the home directory of the .zip file/files.
  3. Remove the .zip file extension from the Excel files you created.
  4. If you’ve created .xlam files, back in Excel, add them to your Excel add-ins.
  5. If applicable, create callbacks in each of your add-ins. In Step 4, there are onAction keywords in my buttons. The onAction keyword indicates that, when the containing element is triggered, the Excel application will trigger the sub-routine encased in quotation marks directly after the onAction keyword. This is known as a callback. In my .xlam files, I have a module called CallBacks where I’ve included my callback sub-routines.

CallBacks Module

My CallBacks module for Chart Tools.xlam looks like

Option Explicit

Public Sub MoveChartWithRelativeLinksCallBack(ByRef control As IRibbonControl)
  MoveChartWithRelativeLinks
End Sub

Public Sub MoveChartToManySheetsWithRelativeLinksCallBack(ByRef control As IRibbonControl)
  MoveChartToManySheetsWithRelativeLinks
End Sub

Public Sub DeleteAllChartsInWorkbookSharingAnAddressCallBack(ByRef control As IRibbonControl)
  DeleteAllChartsInWorkbookSharingAnAddress
End Sub

My CallBacks module for Priveleged UDFs.xlam looks like

Option Explicit

Public Sub InitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.InitialisePrivelegedUDFs
End Sub

Public Sub DeInitialisePrivelegedUDFsCallBack(ByRef control As IRibbonControl)
  ThisWorkbook.DeInitialisePrivelegedUDFs
End Sub

Different elements have a different callback sub-routine signature. For buttons, the required sub-routine parameter is ByRef control As IRibbonControl. If you don’t conform to the required callback signature, you will receive an error while compiling your VBA project/projects. Part 3 of the Microsoft guide defines all the callback signatures.


Here’s what my finished example looks like

Finished Product


Some closing tips

  1. If you want add-ins to share Ribbon elements, use the idQ and xlmns: keyword. In my example, the Chart Tools.xlam and Priveleged UDFs.xlam both have access to the elements with idQ‘s equal to x:chartToolsTab and x:privelgedUDFsTab. For this to work, the x: is required, and, I’ve defined its namespace in the first line of my customUI.xml file, <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" xmlns:x="sao">. The section Two Ways to Customize the Fluent UI in the Microsoft guide gives some more details.
  2. If you want add-ins to access Ribbon elements shipped with Excel, use the isMSO keyword. The section Two Ways to Customize the Fluent UI in the Microsoft guide gives some more details.

AFAIK вы не можете использовать VBA Excel для создания пользовательской вкладки в ленте Excel. Однако вы можете скрыть/сделать видимым ленточный компонент с помощью VBA. Кроме того, ссылка, о которой вы говорили выше, предназначена для MS Project, а не для MS Excel.

Я создаю вкладки для своих приложений/надстроек Excel, используя эту бесплатную утилиту под названием Custom UI Editor.


Изменить: для размещения нового запроса OP

Учебник

Вот короткий учебник, как и обещал:

  • После того, как вы установили пользовательский редактор пользовательского интерфейса (CUIE), откройте его и нажмите «Файл» | Откройте и выберите соответствующий файл Excel. Убедитесь, что файл Excel закрыт, прежде чем открывать его через CUIE. В качестве примера я использую новый рабочий лист.

    Изображение 3733

  • Щелкните правой кнопкой мыши, как показано на рисунке ниже, и нажмите «Отдельный пользовательский интерфейс Office 2007». Он будет вставлять «customUI.xml»

    Изображение 3734

  • Далее Нажмите на меню Вставить | Пример XML | Пользовательская вкладка. Вы заметите, что базовый код будет автоматически сгенерирован. Теперь вы готовы изменить его в соответствии с вашими требованиями.

    Изображение 3735

  • Осмотрите код

    Изображение 3736

    label="Custom Tab": Замените «Пользовательская вкладка» на имя, которое вы хотите предоставить своей вкладке. Пока назовите это «Джером».

    В приведенной ниже части добавляется настраиваемая кнопка.

    <button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />
    

    imageMso: Это изображение, которое будет отображаться на кнопке. «HappyFace» — это то, что вы сейчас увидите. Здесь можно загрузить больше идентификатора изображения.

    onAction="Callback": «Обратный вызов» — это имя процедуры, которая выполняется при нажатии кнопки.

Demo

При этом создайте 2 кнопки и назовите их «JG Button 1» и «JG Button 2». Позвольте сохранить счастливое лицо как образ первого и позволить сохранить «Солнце» для второго. Измененный код теперь выглядит следующим образом:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="MyCustomTab" label="Jerome" insertAfterMso="TabView">
<group id="customGroup1" label="First Tab">
<button id="customButton1" label="JG Button 1" imageMso="HappyFace" size="large" onAction="Callback1" />
<button id="customButton2" label="JG Button 2" imageMso="PictureBrightnessGallery" size="large" onAction="Callback2" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Удалите весь код, который был сгенерирован в CUIE, а затем вставьте вышеуказанный код вместо этого. Сохраните и закройте CUIE. Теперь, когда вы откроете файл Excel, он будет выглядеть следующим образом:

Изображение 3737

Теперь часть кода. Откройте редактор VBA, вставьте модуль и вставьте этот код:

Public Sub Callback1(control As IRibbonControl)

    MsgBox "You pressed Happy Face"

End Sub

Public Sub Callback2(control As IRibbonControl)

    MsgBox "You pressed the Sun"

End Sub

Сохраните файл Excel в качестве файла с поддержкой макроса. Теперь, когда вы нажимаете «Смайлик» или «Солнце», вы увидите соответствующее окно сообщения:

Изображение 3738

Надеюсь, это поможет!

How can I hide and show all the standard Excel ribbon tabs using VBA (not XML)

The answer is «YOU CAN’T«.

AFAIK, you can’t do that using VBA. Unfortunately VBA doesn’t expose the tabs. The only options that you have are as shown in the image below

enter image description here

So you can work with the commandbar, commandbarButton, commandbarComboBox etc…

You can say that Set cbar = Application.CommandBars("Ribbon") but after that, the problem that you will face is how to get a handle for the tabs.

What you can do with the Ribbon using VBA:

  • Determine whether a particular control is Enabled/Visible/Pressed(Toggleboxes/CheckBoxes)
  • Get a control’s label, screen tip, or supertip Display the image associated with a
    control.
  • Execute a particular control.

What you can’t do with the Ribbon using VBA:

  • Determine which tab is currently selected.
  • Activate a particular tab.
  • Hide a particular tab
  • Add a new tab.
  • Add a new group to a tab.
  • Add a new control.
  • Remove/Disable/Hide a control.

You can however use XML to achieve what you want. For example

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    <ribbon>
        <tabs>
            <tab idMso="TabReview" visible="false" />
        </tabs>
    </ribbon>
</customUI>

But I guess you do not want to go via the XML Route.

Нажмите ОК, чтобы вернуться к электронной таблице.

Наша вкладка «Макросы» появилась, как мы и надеялись. Тем не менее, он немного пуст в данный момент.

Чтобы дать ему некоторую функциональность, давайте разберем несколько основных макросов

Создание макросов

Во-первых, мы собираемся создать очень, очень простой макрос, чтобы понять основы.

Создание макроса времени и даты

Сначала перейдите на вкладку « Разработчик » и нажмите « Макросы» .

Макросы Excel для разработчиков

Введите имя макроса dateandtime и затем нажмите Create .

Excel создать макрос

Excel откроет редактор Visual Basic. Добавьте следующий код:

Sub dateandtime() MsgBox Now End Sub 

Это говорит Excel, чтобы представить окно сообщения пользователю и заполнить это окно сообщения с текущим временем и датой, согласно команде Now . Сохраните свою работу — не забывая сохранять свою электронную таблицу как файл с поддержкой макросов, если вы еще этого не сделали — и возвращайтесь в Excel.

Нажмите « Макросы» на вкладке « Разработчик » еще раз, на этот раз выделите дату и время и нажмите « Выполнить» .

макрос запуска Excel

Вы должны увидеть что-то вроде этого:

окно сообщения Excel

Наш макрос сообщения работает! Теперь давайте попробуем что-нибудь более сложное.

Создание макроса автозаголовка

Еще раз откройте диалоговое окно «Макросы», введите имя заголовка и нажмите « Создать» .

заголовки клиентов Excel

Введите следующий код в разделе Sub customheaders () :

 Range("A1").Value = "Date" Range("B1").Value = "Title" Range("C1").Value = "Priority" Range("D1").Value = "Status" Range("E1").Value = "Finished?" 

Это заполнит ячейки в скобках после команды Range соответствующей текстовой строкой. Конечно, вы можете переключать заголовки на все, что захотите, и расширять список по мере необходимости.

Добавьте эту строку кода внизу:

 Range("A1:E1").Font.Bold = True 

Это применимо к полужирному форматированию. о каждом заголовке. Если вы добавили дополнительные заголовки, не забудьте отрегулировать ячейки в скобках, следуя команде Range .

Теперь пришло время вернуться в Excel и посмотреть, работает ли наш макрос как надо.

Excel, автозаголовок

Это действительно так. Этот макрос удобен, если вы настраиваете новые рабочие листы, которые содержат новые данные каждую неделю или месяц. Как только мы добавим этот макрос на нашу панель инструментов, мы сможем заполнять эти заголовки одним щелчком мыши, а не каждый раз вводить их вручную.

Теперь еще один макрос.

Создание макроса связанной электронной таблицы

Сначала создайте новую таблицу и сохраните ее. Затем откройте документ, с которым мы работали ранее, и перейдите к « Разработчик» > « Макросы» . Введите название таблицы и нажмите « Создать» .

Введите следующий код ниже Sub connectedspreadsheet () :

 Workbooks.Open ("C:UsersbradjDesktopMake Use OfVBA Toolbarholiday availability.xlsx") 

Однако вам нужно поменять путь к только что созданной таблице. Чтобы выяснить это, перейдите к документу в проводнике, щелкните его правой кнопкой мыши и выберите « Свойства» .

Этот макрос открывает указанную книгу. Я использую график доступности праздников, на который мне приходится часто ссылаться при просмотре другой таблицы, поэтому для меня имеет смысл иметь прямую ссылку на этот файл на моей панели инструментов.

Сохраните свою работу и вернитесь в Excel, чтобы проверить ее.

электронная таблица Excel

Это прекрасно работает. Когда я запускаю макрос, связанная электронная таблица открывается сразу. Теперь нам просто нужно добавить все эти макросы на нашу панель инструментов.

Заполнение панели инструментов

Откройте вкладку « Макросы », которую мы создали ранее, и щелкните правой кнопкой мыши на ленте. Выберите « Настроить ленту» .

Используйте команды «Выбрать команды» из выпадающего меню и выберите « Макросы» .

Excel выбрать команды из

Вы должны увидеть три макроса, которые мы сделали ранее. Выделите каждый из них и используйте кнопку « Добавить» , чтобы вставить его в новую группу на вкладке « Макросы ».

Excel добавить макрос

Выделите каждый макрос и нажмите « Переименовать», чтобы придать им более презентабельный ярлык, и добавьте пользовательский значок.

Excel переименовать макрос

Теперь у нас есть полнофункциональная панель инструментов, которая предлагает мгновенный доступ к тем макросам, которые мы создали.

Excel закончил панель инструментов

Сделайте панель инструментов, которая работает для вас!

Всем известно, что Excel является невероятно мощным программным обеспечением.

Он может делать что угодно, и в результате настройки по умолчанию могут быть немного сложными.

Excel действительно вступает в свои права, когда вы настраиваете его для собственного использования. Если вы можете создать собственную панель инструментов, состоящую из ваших собственных специализированных макросов, вы наверняка будете более продуктивными. Никто не знает ваш рабочий процесс лучше, чем вы, поэтому никто не в лучшем положении, чтобы сэкономить потраченное время, где это возможно.

Все, что вам нужно, это немного знать VBA, и это пугающая перспектива, если вы не опытный кодер. Однако на самом деле это не так сложно, как может показаться, особенно если вы начнете с основ Довольно скоро вы будете готовы адаптировать свои собственные макросы, и это отличный навык, если вы серьезно относитесь к освоению Excel.

У вас есть совет по созданию макросов Excel? Вы ищете помощь в процессе создания панели инструментов? Присоединяйтесь к разговору в разделе комментариев ниже!

Изображение предоставлено: ARTIST через Shutterstock.com

Понравилась статья? Поделить с друзьями:
  • Vba excel вставить строку ниже
  • Vba excel видимые строки
  • Vba excel вставить строку выше другой
  • Vba excel видеокурс скачать торрент
  • Vba excel вставить скопированную ячейку