Enne Excel 2007 kasutasid VBA programmeerijad CommandBar objekti kohandatud menüüde, kohandatud tööriistaribade ja kohandatud otsetee (paremklõpsu) menüüde loomiseks. Alates Excel 2007-st on CommandBar objekt üsna kummalises positsioonis. Kui kirjutate koodi menüü või tööriistariba kohandamiseks, püüab Excel selle koodi kinni ja ignoreerib paljusid teie käske.
Selle asemel, et kuvada hästi läbimõeldud liidese täiustusi, lisab Excel 2007 (nagu ka hilisemad versioonid) lihtsalt teie kohandatud menüüd ja tööriistaribad kõikehõlmavale lindi vahekaardile nimega Lisandmoodulid.
Menüü- ja tööriistariba kohandused jõuavad gruppi Lisandmoodulid → Menüükäsud või Lisandmoodulid → Kohandatud tööriistaribad. Kuid kiirmenüüde kohandamine (mis kasutab ka CommandBar objekti) töötab endiselt nagu alati – noh, omamoodi.
Alumine joon? CommandBar objekt pole enam eriti kasulik, kuid see jääb ainsaks viisiks otseteemenüüde kohandamiseks.
Lahtri kiirmenüüsse uue üksuse lisamine
Altpoolt leiate näidiskoodi, mis lisab lahtril paremklõpsamisel ilmuvasse kiirmenüüsse uue üksuse. Peaksite saama neid näiteid oma vajadustega kohandada.
Saate seda utiliiti Change Case veidi täiustada, tehes selle kättesaadavaks kiirmenüüst Cell.
Protseduur AddToShortcut lisab lahtri kiirmenüüsse uue menüüelemendi. Saate seda kohandada nii, et see osutaks teie enda makrodele, muutes objekti nimega NewControl atribuute Caption ja OnAction.
Sub AddToShortCut()
Dim Bar nagu CommandBar
Dim New Control as CommandBar Button
DeleteFromShortcut
Määra riba = Application.CommandBars ("Cell")
Määra NewControl = Bar.Controls.Add _
(Tüüp:=msoControlButton, ID:=1, _
ajutine:=Tõsi)
NewControliga
.Caption = "&Muuda suurtähti"
.OnAction = "ChangeCase"
.Style = msoButtonIconAndCaption
Lõpeta
Lõpeta alam
Kui muudate kiirmenüüd, jääb see muudatus jõusse kuni Exceli taaskäivitamiseni. Teisisõnu, muudetud kiirmenüüd ei lähtestu, kui sulgete VBA-koodi sisaldava töövihiku. Seega, kui kirjutate kiirmenüü muutmiseks koodi, kirjutate peaaegu alati koodi, et muuta muudatuse mõju vastupidiseks.
Protseduur DeleteFromShortcut eemaldab uue menüüelemendi lahtri kiirmenüüst:
Sub DeleteFromShortcut()
Vea korral Jätka järgmisena
Application.CommandBars (“Cell”). Juhtelemendid _
(“&Muuda suurtähte”). Kustuta
Lõpeta alam
See näitab, kuidas uus menüüelement kuvatakse pärast lahtril paremklõpsamist.
Lahtri kiirmenüü, mis näitab kohandatud menüüüksust: Change Case.
Esimene tegelik käsk pärast paari muutuja deklareerimist kutsub esile protseduuri DeleteFromShortcut. See avaldus tagab, et kiirmenüüs Lahter kuvatakse ainult üks menüükäsk Muuda tähte. Proovige seda rida kommenteerida (pange rea algusesse apostroof) ja käivitage protseduur paar korda – kuid ärge laske end sellest endast välja lasta!
Paremklõpsake lahtrit ja näete mitut menüüüksuse Change Case esinemisjuhtu. Vabanege kõigist kirjetest, käivitades DeleteFromShortcuti mitu korda (üks kord iga täiendava menüüüksuse jaoks).
Lõpuks on teil vaja võimalust lisada töövihiku avamisel kiirmenüü üksus ja töövihiku sulgemisel see menüüelement kustutada. Seda on lihtne teha. Lihtsalt lisage ThisWorkbooki koodimoodulisse need kaks sündmuseprotseduuri:
Privaatne alamtöövihik_Open()
Helistage AddToShortCut
Lõpeta alam
Privaatne alamtöövihik_BeforeClose (Tühista kui Boolean)
Helistage valikule DeleteFromShortcut
Lõpeta alam
Protseduur Workbook_Open käivitatakse töövihiku avamisel ja protseduur Workbook_BeforeClose enne töövihiku sulgemist. Just see, mida arst määras.
Mille poolest Excel 2013 ja Excel 2016 erinevad?
Kui olete kasutanud Excel 2007 või varasemas versioonis kiirmenüüdega töötamiseks VBA-d, peate olema teadlikud olulisest muudatusest.
Varem, kui teie kood muutis kiirmenüüd, kehtis see muudatus kõigi töövihikute puhul. Näiteks kui lisasite lahtri paremklõpsumenüüsse uue üksuse, ilmub see uus üksus, kui paremklõpsate mis tahes töövihiku lahtril (lisaks muudes töövihikutes, mille avate hiljem). Teisisõnu, kiirmenüü muudatusi tehti rakenduse tasemel.
Excel 2013 ja Excel 2016 kasutavad ühte dokumendiliidest ja see mõjutab kiirmenüüd. Otsemenüüdes tehtavad muudatused mõjutavad ainult aktiivset töövihiku akent. Kui käivitate kiirmenüüd muutva koodi, siis muude akende kui aktiivse akna kiirmenüüd ei muudeta. See on radikaalne kõrvalekalle sellest, kuidas asjad varem toimisid.
Veel üks pööre: kui kasutaja avab töövihiku (või loob uue töövihiku), kui aktiivses aknas kuvatakse muudetud kiirmenüü, kuvatakse uues töövihikus ka muudetud kiirmenüü. Teisisõnu, uued aknad kuvavad samad kiirmenüüd nagu aken, mis oli aktiivne uute akende avamisel.
Alumine rida: kui avasite varem töövihiku või lisandmooduli, milles on muudetud kiirmenüüd, võisite olla kindel, et muudetud kiirmenüüd on saadaval kõigis töövihikutes. Teil pole enam seda kindlust.