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

Bestand crasht Excel!!

Red mijn werkmap!
De beste tool voor Excel bestanden met problemen.

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 > Macro Verspreiden > Menu's
This page in English

Excel-macros geschikt maken voor anderen.

Menu's

De macro’s en functies in de nieuwe invoegtoepassing moeten natuurlijk toegankelijk gemaakt worden voor de gebruiker. Hiertoe staan de Menu’s en taakbalken ter beschikking.

Een extra item in het menu van Excel kan zeer eenvoudig worden gemaakt:


Afbeelding 6, Rechtsklikmenu aanpassen nieuw menu item.

Deze werkwijze heeft echter een groot nadeel: de wijzigingen aan het menu worden lokaal opgeslagen in een systeembestand (afhankelijk van de Excel versie 97, 2000, XP 0f 2003 heet dit bestand respectievelijk gebruikersnaam8.xlb, excel.xlb, excel10.xlb of excel11.xlb) en het is op deze manier niet mogelijk het aangepaste menu op andere PC’s te installeren.

De enige manier om dat wel te kunnen doen is door gebruik te maken van VBA (Zie Listing 1).

Listing 1

Option Explicit

Sub MakeMenu()
    Dim cControl As CommandBarControl
    RemoveMenu    'Voorkom dat het menu er dubbel in komt te staan
    Set cControl = Application.CommandBars(1).FindControl(ID:=30007).Controls.Add _
    (Type:=msoControlButton, temporary:=True)
    With cControl
        .Caption = "&XL Utility Voorbeeld"
        .OnAction = "DemoSub"
    End With
End Sub

Sub RemoveMenu()
    On Error Resume Next
    Application.CommandBars(1).FindControl(ID:=30007).Controls("&XL Utility Voorbeeld").Delete
    On Error GoTo 0
End Sub

Sub DemoSub()
    MsgBox "Je hebt het nieuwe menu item gekozen!!!"
End Sub

De macro "MakeMenu" zorgt ervoor, dat in het Menu Extra een keuzemogelijkheid wordt toegevoegd. Dit wordt bereikt middels de regel:

Set cControl = Application.CommandBars(1).FindControl(ID:=30007).Controls.Add _ (Type:=msoControlButton, temporary:=True)

De findcontrol methode kan ook controls zoeken op basis van hun naam, maar dit is niet wenselijk omdat gebruikers met een andere taalversie van Excel dan hoogstwaarschijnlijk een foutmelding krijgen. De ID eigenschap is taalonafhankelijk. Het menu Extra kent een ID van 30007. De overige ID’s van Excel’s complete menu structuur zijn terug te vinden in het bestand xlmenufundict.zip dat gedownload kan worden vanaf deze pagina. Voor het gemak een overzichtje van de ID’s van de hoofditems in de werkbladmenubalk:

Door vanuit de macro MakeMenu eerst de macro RemoveMenu aan te roepen voordat het nieuwe item wordt aangemaakt, wordt voorkomen dat per ongeluk hetzelfde menuitem twee keer verschijnt (dit zou kunnen gebeuren indien om welke reden dan ook de macro MakeMenu twee keer wordt aangeroepen). De macro RemoveMenu dient vervolgens bij het sluiten van de invoegtoepassing te worden aangeroepen om het item uit het menu te verwijderen. Strikt genomen is RemoveMenu niet noodzakelijk omdat het argument "Temporary:=true" is gebruikt, hetgeen ervoor zorgt dat de wijzigingen aan het menu bij sluiten van Excel ongedaan worden gemaakt. Het is echter aan te bevelen dat het menu ook verdwijnt wanneer het bestand met de bijbehorende macro’s gesloten wordt en niet Excel als geheel (bijvoorbeeld wanneer de gebruiker besluit de invoegtoepassing te de-installeren).