Office Guru

"Gyári" funkció gyors hozzáadása a jobb gombos menühöz Excelben

2016. október 15. - Office Guru

Hosszabb ideig tartó, különböző okoknak köszönhető szünetelés után ismét poszttal jelentkezem végre a blog hasábjain, de indulásnak egy régóta esedékes, könnyen fogyasztható írás következzen, ami egy szimpla kis makrós megoldást tartalmaz. A cél az Excelben az egy kijelölésen vagy éppen cellán, jobb egérgombbal történő kattintás után előugró menü módosítása, első körben mindenképpen csak már alapból meglévő funkciók hozzáadásával.

2013-as Excelben, jobb egérgombbal történő kattintás után a következő menüt látjuk alapesetben:

vegre1.jpgTegyük fel, hogy ehhez szeretnénk hozzáadni valamilyen általunk gyakran használt funkciót, ami eddig nem volt így elérhető - érdemes azért hozzátenni, hogy a billentyűkombinációk gyakorlásával és használatával ezek az igények elég gyorsan eliminálhatóak. Mindenesetre a cél tehát egy újabb menüpont hozzáadása, jelen esetben ez legyen a Freeze Pane parancs, hiszen ennek elérése alapesetben Ribbonról történne.

vegre2_1.jpgEnnek hozzáadása egy öt soros kód segítségével pillanatok alatt megtörténhet, úgyhogy ugorjunk is át gyorsan ALT+F11 lenyomásával a VBA Editorunkba.

Első lépésként létrehozunk egy CommandBar típusú változót NewMenu néven, amely változótípus menüket és megjelenített eszköztárakat tartalmazó gyűjtemények tárolására szolgál. Kapásból egy lendülettel be is állítjuk a kezdő értékét, ami az Application objektum CommandBar tulajdonságai közül a Cell objektumot fogja visszaadni, ami nem más, mint a cellákra, kijelölésekre vonatkozó menü - amit jobb gombbal való kattintással csalogatunk elő.

Dim NewMenu As CommandBar
Set NewMenu = Application.CommandBars("Cell")

És innen pedig már nincs más hátra, mint az előbb említett CommandBar("Cell") objektum Add metódusának felhasználása, hogy hozzáadjuk a szükséges menüpontunkat. Ennek a metódusnak öt lehetséges paramétere van:

- Type (itt a típust tudjuk definiálni)
- Id (ez a konkrét, már beépített funkció/control azonosítója)
- Parameter (custom funkciók esetén ezt felhasználhatjuk információk tárolására)
- Before (ez a menüben való elhelyezkedést jelenti, az itt megadott sorszám elé kerül beszúrásra az új funkciónk)
- Temporary (ha True lesz ez a paraméter, akkor bezáráskor törlődik az új funkció/control a menüből)

Ebből következik, hogy nekünk most a típus, az Id és a Before paraméterek kellenek.

A típus nagyjából azt határozza meg, hogy gombot akarunk-e, combo boxot, legördülő menüt stb., a mi esetünkben gombnál maradunk, így a típus neve msoControlButton (ezekről tökéletes kis lista érhető el a Microsoft hivatalos oldalán). A Before az legyen egyértelműen egy egyes, hiszen a jobb láthatóság kedvéért most a legelső helyre pakoljuk az új funkciót a menüben, az ID-nál viszont le kell vadásznunk a hozzáadandó parancs egyedi azonosítóját. Ezt az ID listát saját magunk is meghívhatjuk makróból egy rövidebb kód segítségével (lehet, hogy erre is majd sort kerítek egy posztban később, ha igény van rá), de elég sok listát is találhatunk az interneten - a lényeg, hogy roppant könnyen kideríthető, hogy a Freeze Panes id-ja a 443.

Így kódunk el is készült:

vegre3.jpgHa ezt lefuttatjuk, már láthatjuk is az eredményt:

vegre4.jpgHa esetleg valamilyen okból ezt törölni is szeretnénk, írjunk egy hasonló Subot, amit meghívhatunk majd egy főmakróban és abban a szubrutinban mindössze ezt a sort:

NewMenu.Controls.Add Type:=msoControlButton, ID:=443, before:=1

Le kell cserélnünk erre:

NewMenu.FindControl(ID:=443).Delete

Ha lefuttatjuk, töröltük is az új funkciót/controlt.

A bejegyzés trackback címe:

https://officeguru.blog.hu/api/trackback/id/tr1311809763

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása