Most Valuable Professional


View Jan Karel Pieterse's profile on LinkedIn subscribe to rss feed
Subscribe in a reader

Subscribe to our mailing list

* indicates required

Audit !!!

Probeer onze RefTreeAnalyser
de beste Excel formule auditing tool.

Cursussen

Excel VBA Masterclass (Engels)
Excel VBA voor Financials

Third party tools

Speed up your file

FastExcel
The best tool to optimise your Excel model!

Repair your file

Stellar Phoenix Excel Repair
Best tool to repair corrupt Excel sheets and objects
Home > Nederlandse site > Artikelen > Invoegtoepassing bouwen > Gebruikersinterface
This page in English

Bouwen van een invoegtoepassing voor Excel, De gebruikersinterface

Invoegtoepassingen zijn verborgen bestanden en hebben dus geen werkbladen waar je bijvoorbeeld knoppen op kunt zetten. Er is dus iets nodig zodat de gebruiker ermee kan werken zoals misschien invoerschermen. Of ze moeten werkbladen toevoegen waar de gebruiker data in in kan voeren. Deze invoegtoepassing gebruikt enkele elementen op het lint.

Lint aanpassingen

Onze invoegtoepassing heeft dus slechts een beperkte gebruikersinterface, alles wat er nodig is zal op het lint komen te staan. Lintaanpassingen doen is geen eenvoudige klus. Gelukkig zijn er enkele zeer goede bronnen met informatie te vonden:

Met hulp van de Custom UI Editor, open ik het bestand waarin we aan het werk zijn (Ik heb dit bestand daarvoor opgeslagen en Excel gesloten om conflicten te voorkomen.

Na openen in de editor voeg ik een "Office 2007 CustomUI part" toe aan het bestand:

Inserting a customUI part

Door deze variant te nemen zorgen ik ervoor dat de lintaanpassingen in alle volgende Excel versies werken:Excel 2007, 2010, 2013 en 2016. Vervolgens heb ik onderstaande XML code ingevoegd:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="rxJKPSheetToolscustomUI_onLoad">
    <ribbon>
        <tabs>
            <tab id="rxJKPSheetTools" label="SheetTools">
                <group id="rxJKPSheetToolsGeneral" label="Sheet Tools">
                    <dropDown id="rxJKPSheetToolsbtnSheets"
                        getItemCount="rxJKPSheetToolsbtnSheets_Count"
                        getItemLabel="rxJKPSheetToolsbtnSheets_getItemLabel"
                        onAction="rxJKPSheetToolsbtnSheets_Click"
                        sizeString="MMMMMMMMMMMMMMMMMMMMMMMM"
                        label="Sheets"
                        getSelectedItemIndex="rxJKPSheetToolsbtnSheets_getSelectedItemIndex"
                    />
                <button id="rxJKPSheetToolsbtnInsertToc"
                    label="Table Of Contents"
                    size="large"
                    onAction="rxJKPSheetToolsbtnInsertToc"
                    imageMso="CustomTableOfContentsGallery" />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

Na invoegen van die code ziet de Custom UI Editor er zo uit:

Custom UI Editor

Van groot belang zijn de zogeheten callbacks die in de xml staan. Die geven aan dat er voor die acties VBA code in de werkmap in kwestie moeten staan. Door op de meest rechtse knop op de toolbar te klikken laat je de Custom UI editor de lege Sub ... End Sub kapstokken voor je genereren.

De xml bevat deze callbacks:

Misschien is het je opgevallen wat voor complexe routinenamen ik heb gemaakt (zoals "rxJKPSheetToolsbtnSheets_Click"). Vooral het "rxJKPSheetTools" deel. Callback namen moeten namelijk strikt uniek zijn binnen de contaxt van een lopende instantie van Excel. En dan bedoel ik ook echt uniek. Geen enkel ander openstaand Excel bestand kan een callback hebben met een routinenaam die samenvalt met een andere. Is dat wel het geval, dan loop je de kans dat de routine in de andere werkmap wordt aangeroepen en kunnen dus zeer onverwachte dingen gebeuren. Daarom zet ik altijd een stukje tekst voor iedere routinenaam waardoor ik er zeker van kan zijn dat deze uniek zijn.

Na kopieren van de kapstokjes uit de Custom UI editor sla ik de werkmap op en open deze in Excel. Vervolgens plak ik ze in een module in het VBA project:

Option Explicit

Sub rxJKPSheetToolscustomUI_onLoad(ribbon As IRibbonUI)
End Sub

Sub rxJKPSheetToolsbtnInsertTOC(control As IRibbonControl)
End Sub

'Callback for rxJKPSheetToolsbtnSheets getItemCount
Sub rxJKPSheetToolsbtnSheets_Count(control As IRibbonControl, ByRef returnedVal)
End Sub

Public Sub rxJKPSheetToolsbtnSheets_getItemLabel(control As IRibbonControl, Index As Integer, ByRef returnedVal)
End Sub

'Callback for rxJKPSheetToolsbtnSheets getSelectedItemIndex
Sub rxJKPSheetToolsbtnSheets_getSelectedItemIndex(control As IRibbonControl, ByRef returnedVal)
End Sub

Sub rxJKPSheetToolsbtnSheets_Click(control As IRibbonControl, id As String, Index As Integer)
End Sub

Hierna: code toevoegen aan de callbacks


 


Vragen, suggesties en opmerkingen

Heeft u vragen, suggesties of opmerkingen? Gebruik dan dit formulier.

Mocht uw vraag niet direct relevant zijn voor deze pagina, maar een algemene Excel vraag betreffen, dan adviseer ik om deze hier te stellen: www.eileenslounge.com.

Uw naam (verplicht veld):

Uw e-mail adres (Niet verplicht, dit adres wordt niet getoond)

Uw verzoek of commentaar:

Als u VBA code in uw commentaar plaatst, gebruik dan [VB] tags: [VB]Uw code[/VB].