Přeskočit navigaci | Přeskočit na novinky
     

Jste zde: Úvodní stránka » excel » vba-pas-karet-ribbon-menu » Ribbon-vlastni-pas-karet-Excel-VBA
Microsoft Excel logo

Ribbon - vlastní pás karet - Excel VBA

Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

Jak na vlastní pás karet využitím VBA v Excel. Od teorie jak vytvořit přímo ve VBA nebo použitím doplňku na XML. Jak na tlačítko, jejich velikost, oddělovače, pozici, nápovědy k jednotlivým tlačítkům.

Jak na pás karet využitím VBA v Excel

Při programování VBA kódu se mnohdy místo tlačítek hodí využít vlastní pás karet (Ribbon). Jak tento pás karet vložit do Excel, jak hotový vlastní pás (Ribbon) upravit se dozvíte v tomto článku. Bude rozdělen na hlavní sekce:

  • Doplněk pro tvorbu menu a jak jej využít
  • Jak na vlastní menu využítím XML - ať víme co která položka znamená
  • Jak na menu přímo ve VBA - pokud doplněk využít nechcete

Které budou obsahovat podsekce


Jak nainstalovat Custom UI Editor

Nejlépe pro tvorbu vlastních pásu karet je nainstalování doplňku Custom UI Editor, který umožňuje kontrolovat strukturu XML kódu. Rychleji se menu odladí (překlepy, dvě stejné idčka, ...). Před instalací je potřeba stáhnout doplněk ze stránek (cca 250 kB - opravdu tak malý soubor):

Nebo zrcadlo:

Pro správnou činnost je potřeba mít ve Windows Framework 3.0. Pokud ho nemáte tak vás instalátor upozorní. Stačí stáhnou ze stránek Microsoftu a doinstalovat (nejlépe "vygooglit" text z dialogového okna, které se objeví pokud Framework nemáte).

Po správném nainstalování a puštění obdržíte onen program, který bude vypadat podobně:

VBA Excel pás karet (Ribbon):

Jak funguje Custom UI Editor

Důležitých je několik ikonek.

  • Načtení Excelovského sešitu - načtení sešitu do kterého chcete umístit váš vlastní pás karet
  • Uložení načteného Excelovského sešitu - pokud máte správně vložen XML kód pásu karet
  • Kontrola správné syntaxe XML - zkontroluje syntaxi, zda nemáte dvě stejná _IDčka, dvě stejné názvy maker atd. Bez této pomůcky se chyby hledají podstatně komplikovaněji
  • Vygenerování maker pro VBA - aneb jak se volá makro z tlačítka ve vašem pásu karet - ona závorka s Control As IRibbonControl - jasně že nemusíte používat pokud víte jak se volá, ale za mně zjednodušeší práci.
VBA Excel pás karet (Ribbon):

Jak funguje. Stačí načíst Excelovský soubor, vložit XML kód, zkontrolovat vygenerovat podklady pro makra uložit a máte hotovo.

Pozor, úpravy přepisují sešit, proto doporučuji mít zálohu, než začnete něco provádět.

Editor umíme ovládat, teď se pojďme pustit do XML struktury.

Teorie - struktura XML pro pás karet Ribbon

Než se pustíme do tvorby vlastního menu rozebereme si strukturu XML kódu pro menu. Struktura se skládá z několika sekcí:

Kód může vypadat, následně si sekce rozebereme

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="customTab" label="Menu moje" insertAfterMso="TabDeveloper"> <group id="customGroup1" label="Moje skupina 1"> <button id="customButton1" label="Moje položka 1" size="large" onAction="Macro1" imageMso="AccountMenu" /> <button id="customButton2" label="Moje položka 2" size="normal" onAction="Macro2" imageMso="DirectRepliesTo" /> <button id="customButton3" label="Moje položka 3" size="normal" onAction="Macro3" imageMso="RegionLayoutMenu" /> </group> <group id="customGroup5" label="Makro" > <button id="customButton51" label="Klikni" screentip="Tucný nadpis nápoveda" supertip="Popis nápovedy žluté okno. Komplikace s ceštinou." size="large" <separator id="Seperator2"/> </group> </tab> </tabs> </ribbon> </customUI>

Struktura

Pojďmě se podívat co znamenají jednotlivé sekce:

  • ribbon - informace že půjde o menu typu ribbon
  • tabs - půjde o pasy karet
  • tab - pojmenování a umístění našeho pásu karet
  • group - pojmenování sekce (skupiny v pásu karet)
  • button - Tlačítko v příslušné skupině, tlačítko nese tyto informace:
    • Id - Unikátní označení tlačítka
    • Label - Popis tlačítka - text který uvidíte na pásu karet
    • Size - Velikost tlačítka - normální nebo velké
    • OnAction - Které makro spouštět - následně je dále popsáno jak musí ono makro vypadat (neboli vám řekne i UI Editor)
    • imageMSO - Ikona tlačítka, pokud k tlačítku chcete mít ikonu (lze mít i vlastní)
    • Screentip - pokud chcete k tlačítku poznámku, když na něj najedete myší (tučný text)
    • Supertip - pokud chcete k tlačítku poznámku, když na něj najedete myší (normální text)
    • separator - oddělovač v sekci skupině
  • <!-- --> - můžete mít i poznámky v xml-ku

Poznámka: UI Editor má problém s diakritikou, proto než bych složitě řešil, jak obejít, tak píši texty bez háčku a čárek (nebo v angličtině, tam s diaktritikou není problém ;) ).

Jedno tlačítko spouštěcí makro

Pojďme si vytvořit vlastní menu, které bude mít jedno tlačítko, tlačítko bude mít ikonku a po kliku se zobrazí ať žije "JakNaExcel.cz" ano nechci použít obligátní Ahoj světě ;) Ať jsem trochu originál.

Nejprve menu

Vytvoříme vlastní menu s jedním tlačítkem:

<!-- office.lasakovi.com --> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="MojeSuperMenu" label="Menu moje" insertAfterMso="TabDeveloper"> <group id="PrvniSkupina" label="Skupina" > <button id="Tlacitko01" label="Klikni" size="large" onAction="MacroKlikni" imageMso="HappyFace" /> </group> </tab> </tabs> </ribbon> </customUI> VBA Excel pás karet (Ribbon): v UI Editoru

Můžeme zkontrolovat jak se bude volat makro, vytvoříme pak ve VBA makro které vložíme do modulu (Module). Neboli zkopírujeme:

'Callback for Tlacitko01 onAction Sub MacroKlikni(control As IRibbonControl) End Sub VBA Excel pás karet (Ribbon): v UI Editoru

Máme uložíme a jdeme spustit sešit.

VBA Excel pás karet (Ribbon) naš první pás karet

Do module vložíme zkopírovaný kód a doplníme do Mesagebox (MsgBox):

VBA Excel pás karet (Ribbon) naš první pás karet
'Callback for Tlacitko01 onAction Sub MacroKlikni(control As IRibbonControl) MsgBox ("At žije JakNaExcel.cz") End Sub

Otestujeme:

VBA Excel pás karet (Ribbon) naš první pás karet

Vylepšení struktury - velikost tlačítka, ikona

Pozor UI Editor rozlišuje velká a malá písmena > large není Large ;)

První krok máme za sebou, tlačítko funguje, ale co když chceme jinou velikost tlačítka, malé ikonky? Pojďme si ukázat pár ukázek:

  • malé ikony
  • velké ikony
  • jen texty

Malé ikony

Pokud chceme mít malé ikony s textem

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="customTab" label="Menu moje" insertAfterMso="TabDeveloper"> <group id="customGroup1" label="Moje skupina 1"> <button id="customButton1" label="Moje položka 1" size="normal" onAction="Macro1" imageMso="MicrosoftProject" /> <button id="customButton2" label="Moje položka 2" size="normal" onAction="Macro2" imageMso="MicrosoftExcel" /> <button id="customButton3" label="Moje položka 3" size="normal" onAction="Macro3" imageMso="MicrosoftAccess" /> </group> </tab> </tabs> </ribbon> </customUI> VBA Excel pás karet (Ribbon) - malé ikony

Velké ikony

Jak na velké ikony jen u size změníme normal za large.

<!-- office.lasakovi.com --> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="customTab" label="Menu moje" insertAfterMso="TabDeveloper"> <group id="customGroup1" label="Moje skupina 1"> <button id="customButton1" label="Moje položka 1" size="large" onAction="Macro1" imageMso="MicrosoftProject" /> <button id="customButton2" label="Moje položka 2" size="large" onAction="Macro2" imageMso="MicrosoftExcel" /> <button id="customButton3" label="Moje položka 3" size="normal" onAction="Macro3" imageMso="MicrosoftAccess" /> </group> </tab> </tabs> </ribbon> </customUI> VBA Excel pás karet (Ribbon) - velké ikony

Pouze text

Jak na text bez ikon. Přeci jen hledat ikonky se někdy nechce ;)

<!-- office.lasakovi.com --> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="customTab" label="Menu moje" insertAfterMso="TabDeveloper"> <group id="customGroup1" label="Moje skupina 1"> <button id="customButton1" label="Moje položka 1" onAction="Macro1" /> <button id="customButton2" label="Moje položka 2" onAction="Macro2" /> <button id="customButton3" label="Moje položka 3" onAction="Macro3" /> </group> </tab> </tabs> </ribbon> </customUI> VBA Excel pás karet (Ribbon) - texty ikony

Pouze ikony

Již zvládnete sami.

... váš kód

Další prvky - oddělovač, sekce, nápověda

Jak na další prvky

  • Oddělovač
  • Nová skupina - Group
  • Nápověda

Oddělovač - Separátor

Chcete-li v rámci jedné skupiny mít optické oddělení využijeme.

<separator id="Seperator2"/> VBA Excel pás karet (Ribbon) - texty ikony

Nová skupina - Group

<group id="Skupina3" label="Rozbalovatko"> ... </group> VBA Excel pás karet (Ribbon) - texty ikony

Nápověda

Pokud chceme ještě k ikonám přidat nápovědu. Jen UI Editor má problém s češtinou (proto bez hacku a carek).

  • screentip="Tucný nadpis nápoveda"
  • supertip="Popis nápovedy žluté okno. Komplikace s ceštinou."

Ukázka pro kliknutí:

<group id="customGroup5" label="Makro" > <button id="customButton51" label="Klikni" screentip="Tucný nadpis nápoveda" supertip="Popis nápovedy žluté okno. Komplikace s ceštinou." size="large" onAction="Macro1" imageMso="HappyFace" /> </group> VBA Excel pás karet (Ribbon):

Jiné prvky - rozbalovací menu, text box

V této sekci postupně doplním další prvky co lze na menu umístit. Například rozbalovací menu, text box. Zatím je k dispozici:

  • Rozbalovací menu - DropDownMenu
  • Zaškrtávání
  • Toogle - v přípravě

DropDownMenu

Skvělá věc může být z důvodu přehledmnosti rozbalovací menu?

<group id="Group3" label="Rozbalovatko"> <menu id="MojeDropDownMenu" label="DropMenu" size="large" imageMso="TextAlignGallery" > <button id="Button31" label="Podpolozka 0" onAction="Macro31" imageMso="TextAlignGallery" /> <button id="Button32" label="Podpolozka 1" onAction="Macro" imageMso="TextAlignGallery" /> <button id="Button33" label="Podpolozka 2" onAction="Macro10" imageMso="TextAlignGallery" /> <button id="Button34" label="Podpolozka 3" onAction="Macro12" imageMso="RegionLayoutMenu" /> </menu> </group> VBA Excel pás karet (Ribbon):

Vyběrové políčko - CheckBox

Další skvělá věc je zaškrtávatko, jen funguje až po kliku.

<group id="GroupChcek" label="Zaskrtni"> <checkBox id="mujcheckbox" label="Zaskrtni" onAction="CheckBox_Makro"/> </group>

Samozdřejmě je potřeba i na klik reagovat, tak jen pro připomenutí jak provést.

Sub CheckBox_Makro(control As IRibbonControl, pressed As Boolean) ' funguje až po kliku Select Case pressed Case True MsgBox ("zaškrtnuto") Case False MsgBox ("nezaškrtnuto") End Select End Sub VBA Excel pás karet (Ribbon):

Text Box

Jak na textbox jako další možnost mít v sekci

<group id="TextBox" label="Muj Textbox"> <editBox id="MujTextBox" label="Zadej text" onChange="EditBox_OnChange"/> </group>

Následně se ještě podívame jak hodnotu z TextBox získat.

VBA Excel pás karet (Ribbon):

Toggle

V přípravě

ListBox

V přípravě

Jak na spuštění menu přímo z VBA

Pokud nechcete si instalovat UI editor, můžete XML psát přímo ve VBA (inspirace na Google). Osobně mám raději UI Editor, který kontroluje chyby (překlepy). Přímo ve VBA je nevidím a hledat hodiny, že dvě Id mají shodný název se mi nechce. Jen pro ukázku, kdyby nebylo zbytí.

Dim hFile As Long Dim path As String, fileName As String, ribbonXML As String, user As String ' předpokld klasické instalace hFile = FreeFile user = Environ("Username") path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\" fileName = "Excel.officeUI" ribbonXML = "<mso:customUI xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine ribbonXML = ribbonXML + " <mso:ribbon>" & vbNewLine ribbonXML = ribbonXML + " <mso:qat/>" & vbNewLine ribbonXML = ribbonXML + " <mso:tabs>" & vbNewLine ribbonXML = ribbonXML + " <mso:tab id='MujPasKaretVBA' label='Menu z VBA' insertBeforeQ='mso:TabDeveloper'>" & vbNewLine ribbonXML = ribbonXML + " <mso:group id='Group' label='Skupina Test' autoScale='true'>" & vbNewLine ribbonXML = ribbonXML + " <mso:button id='runExcel' label='Excel' " & vbNewLine ribbonXML = ribbonXML + "imageMso='AppointmentColor3' onAction='Smile'/>" & vbNewLine ribbonXML = ribbonXML + " </mso:group>" & vbNewLine ribbonXML = ribbonXML + " </mso:tab>" & vbNewLine ribbonXML = ribbonXML + " </mso:tabs>" & vbNewLine ribbonXML = ribbonXML + " </mso:ribbon>" & vbNewLine ribbonXML = ribbonXML + "</mso:customUI>" ribbonXML = Replace(ribbonXML, """", "") Open path & fileName For Output Access Write As hFile Print #hFile, ribbonXML Close hFile

Menu máme teď jen stačí zavolat. Zde je jiné volání, procedura nemusí v module obsahovat text: "control As IRibbonControl" (Teda nesmí). Proto stačí do module vložit kód pro spuštění:

Sub Smile() MsgBox ("Usměv funguje!") End Sub

Proč Smile, protože ve VBA mám makro pojmenováno onAction='Smile'

Otestujeme ;)

VBA Excel pás karet (Ribbon) - přímo ve VBA

Jak na odstranění menu přímo z VBA

Vytvořit umíme, tak ještě ukázka, jak námi vytvořené makro odstranit. Sice zbytečná kapitola, ale kdyby se někdo ptal.

Dim hFile As Long Dim path As String, fileName As String, ribbonXML As String, user As String hFile = FreeFile user = Environ("Username") path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\" fileName = "Excel.officeUI" ribbonXML = "" & _ "" Open path & fileName For Output Access Write As hFile Print #hFile, ribbonXML Close hFile
Microsoft Excel VBA - stahuj logo

Ke stažení

Soubor Ribbon - pás karet ve VBA - základ soubor ve formátu *.xlsm ke stažení zdarma. Soubor využívá makra.

Další soubory ke stažení zdarma jsou v přípravě. Podpořit zveřejnění můžete podporou na Patreon.


Závěrem

Narazili jste na nějaký problém, máte tip na vylepšení doplnění, můžete se zmínit v komentářích.

Článek byl aktualizován: 01.01.2021 10:19

Odměna

Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.


Pavel Lasák - autor webu

Pavel Lasák

Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře zatím nejsou

Můžete být prvními co zanechají smysluplný komentář.







Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2021 |