Inhoudsopgave:
Video: Cursus VBA programmeren in Excel 2024
VBA-programmeurs vóór Excel 2007 gebruikten het CommandBar-object voor het maken van aangepaste menu's, aangepaste werkbalken en aangepaste snelmenu's (rechtermuisknop). Te beginnen met Excel 2007 bevindt het CommandBar-object zich in een nogal vreemde positie. Als u code schrijft om een menu of werkbalk aan te passen, onderschept Excel die code en negeert hij veel van uw opdrachten.
In plaats van uw goed doordachte interface-uitbreiding weer te geven, dumpt Excel 2007 (zoals latere versies) gewoon uw aangepaste menu's en werkbalken in een verzamel-Lint-tabblad met de naam Add-ins.
Aanpassingen van menu- en werkbalk eindigen in de invoegtoepassingen → Menuopdrachten of de invoegtoepassingen → Aangepaste werkbalken. Maar het aanpassen van snelmenu's (die ook het CommandBar-object gebruiken) werkt nog steeds zoals het altijd heeft - nou ja, een soort van.
Conclusie? Het CommandBar-object is niet erg nuttig meer, maar het blijft de enige manier om snelmenu's aan te passen.
Een nieuw item toevoegen aan het snelmenu van de cel
Hieronder vindt u voorbeeldcode die een nieuw item toevoegt aan het snelmenu dat verschijnt wanneer u met de rechtermuisknop op een cel klikt. U zou deze voorbeelden aan uw behoeften moeten kunnen aanpassen.
U kunt het hulpprogramma Case wijzigen een beetje verbeteren door het beschikbaar te maken via het snelmenu Cell.
De procedure AddToShortcut voegt een nieuw menu-item toe aan het snelmenu Cell. U kunt het aanpassen aan uw eigen macro's door de eigenschappen Caption en OnAction van het object NewControl te wijzigen.
Sub AddToShortCut () Dim Bar als CommandBar Dim NewControl als CommandBarButton DeleteFromShortcut Set Bar = Toepassing. CommandBars ("Cell") Stel NewControl = Bar in. Controls. Add _ (Type: = msoControlButton, ID: = 1, _ temporary: = True) Met NewControl. Caption = "& Case wijzigen". OnAction = "ChangeCase". Style = msoButtonIconAndCaption End with End Sub
Wanneer u een snelmenu wijzigt, blijft die wijziging van kracht totdat u Excel opnieuw start. Met andere woorden, aangepaste snelmenu's worden niet opnieuw ingesteld wanneer u de werkmap met de VBA-code sluit. Daarom, als u code schrijft om een snelmenu te wijzigen, schrijft u bijna altijd code om het effect van uw wijziging ongedaan te maken.
De DeleteFromShortcut-procedure verwijdert het nieuwe menu-item uit het snelmenu Cell:
Sub DeleteFromShortcut () On Error Resume Next Application. CommandBars (“Cell”). Besturing _ ("& Case wijzigen"). Eind sub verwijderen
Dit toont hoe het nieuwe menu-item wordt weergegeven nadat u met de rechtermuisknop op een cel hebt geklikt.
Het snelmenu van de cel met een aangepast menu-item: Case wijzigen.De eerste daadwerkelijke opdracht na het declareren van een aantal variabelen roept de procedure DeleteFromShortcut aan. Deze instructie zorgt ervoor dat er slechts één menu-item Wijzigen in het snelmenu Cel verschijnt. Probeer commentaar te geven op die regel (plaats een apostrof aan het begin van de regel) en voer de procedure een paar keer uit - maar laat je niet meeslepen!
Klik met de rechtermuisknop op een cel en u kunt meerdere exemplaren van het menu-item Wijzigen. Ontdoe u van alle vermeldingen door DeleteFromShortcut meerdere keren uit te voeren (eenmaal voor elk extra menu-item).
Tot slot hebt u een manier nodig om het snelmenu-item toe te voegen wanneer de werkmap wordt geopend en om het menu-item te verwijderen wanneer de werkmap is gesloten. Dit doen is gemakkelijk. Voeg deze twee gebeurtenisprocedures toe aan de codemodule ThisWorkbook:
Private Sub Workbook_Open () Call AddToShortCut End Sub Private Sub Workbook_BeforeClose (Cancel As Boolean) Call DeleteFromShortcut End Sub
De werkmap_Open procedure wordt uitgevoerd wanneer de werkmap wordt geopend, en de werkboek_voorsluitingsprocedure wordt uitgevoerd voordat de werkmap wordt gesloten. Precies wat de dokter heeft besteld.
Wat is er anders in Excel 2013 en Excel 2016?
Als u VBA hebt gebruikt om met snelmenu's te werken in Excel 2007 of eerder, moet u op de hoogte zijn van een aanzienlijke wijziging.
Als in het verleden een snelmenu werd gewijzigd in uw code, was die wijziging van kracht voor alle werkmappen. Als u bijvoorbeeld een nieuw item hebt toegevoegd aan het menu Rechtermuisklik, wordt dat nieuwe item weergegeven wanneer u met de rechtermuisknop op een cel in een -werkmap (of andere werkmappen die u later opent) klikt. Met andere woorden, wijzigingen in het snelmenu werden aangebracht op het -toepassingsniveau .
Excel 2013 en Excel 2016 gebruiken één documentinterface en dat is van invloed op snelmenu's. Wijzigingen die u aanbrengt in snelmenu's zijn alleen van invloed op het actieve werkmapvenster. Wanneer u de code uitvoert die het snelmenu wijzigt, wordt het snelmenu voor andere vensters dan het actieve venster niet gewijzigd. Dit is een radicale afwijking van hoe de dingen vroeger werkten.
Nog een keer: als de gebruiker een werkmap opent (of een nieuwe werkmap maakt) wanneer het actieve venster het gewijzigde snelmenu weergeeft, geeft de nieuwe werkmap ook het gewijzigde snelkoppelingsmenu weer. Met andere woorden, nieuwe vensters tonen dezelfde snelmenu's als het venster dat actief was toen de nieuwe vensters werden geopend.
Bottom line: als u in het verleden een werkmap of invoegtoepassing voor die gewijzigde snelmenu's hebt geopend, kunt u er zeker van zijn dat de gewijzigde snelmenu's beschikbaar zijn in alle werkmappen. Je hebt die zekerheid niet meer.