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.
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:
Které budou obsahovat podsekce
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ě:
Důležitých je několik ikonek.
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.
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>
Pojďmě se podívat co znamenají jednotlivé sekce:
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 ;) ).
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.
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>
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
Máme uložíme a jdeme spustit sešit.
Do module vložíme zkopírovaný kód a doplníme do Mesagebox (MsgBox):
'Callback for Tlacitko01 onAction
Sub MacroKlikni(control As IRibbonControl)
MsgBox ("At žije JakNaExcel.cz")
End Sub
Otestujeme:
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:
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>
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>
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>
Již zvládnete sami.
... váš kód
Jak na další prvky
Chcete-li v rámci jedné skupiny mít optické oddělení využijeme.
<separator id="Seperator2"/>
<group id="Skupina3" label="Rozbalovatko">
...
</group>
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).
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>
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:
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>
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
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.
V přípravě
V přípravě
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 ;)
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 = "Soubor Ribbon - pás karet ve VBA - základ 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.
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
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.
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ů.
Můžete být prvními co zanechají smysluplný komentář.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
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 - 2024 |