A mai posztban igazából két, nem túlságosan komplex, ám néha fejtörést okozó problémára keresem és próbálom megadni a választ, amelyekben a közös az, hogy mindkettő beágyazott objektumokhoz köthető. Az első a PowerPointot érinti és valószínűleg mindenki, aki valaha prezentált már ezzel a programmal, találkozott vele. Képzeljük el, hogy van egy szépen megkomponált előadásunk, a közönséget sikerült is lenyűgöznünk, figyelnek ránk, de aztán odaérünk egy diához, amelyen van egy beágyazott objektumunk, mondjuk egy Excel fájl, néhány fontos, bemutatandó adattal.
Nos, alapesetben ezt csak úgy tudjuk megnyitni, ha leállítjuk a prezentációt, visszalépünk szerkesztő üzemmódba, majd a megtekintés után újraindítjuk a vetítést. Ez általában eléggé megakasztja a prezentáció varázsát, úgyhogy következzen egy lehetséges megoldási mód a fentiek elkerülésére.
Szerkesztő üzemmódban lépjünk arra a diára, amelyen a beágyazott Excel-fájlunk van, jelöljük ki a fájlt, majd az Insert ribbonfül Links szekciójában található Action menüpontra kattintsunk:
Felugrik egy eléggé magától értetődő kis ablak:
Itt tudjuk meghatározni azt, hogy mit tegyen a program akkor, ha rákattintunk (Mouse Click fül) vagy ráhúzzuk (Mouse Over) az egeret az adott objektumra. A lehetőségek elég jók, átléphetünk másik diára, elindíthatunk egy makrót vagy egy programot, illetve ami most minket leginkább érdekel, eseményt rendelhetünk az objektumra való kattintáshoz.
Mivel mi most megnyitni szeretnénk a beágyazott Excelünket, ezért kattintsuk be az Object action rádiógombot, majd válasszuk ki az Open eseményt és ha még esetleg a kattintás kijelölése (Highlight click) checkboxot is bepipáljuk, akkor nagyjából tökéletesen el is értük, amit akartunk. És ha most elindítjuk a vetítést, már működik is, amit mindig szerettünk volna:
A másik kérdéskör, amit röviden feszegetni fogok, valószínűleg annyira ritka felhasználói igényt testesít meg, hogy tömegek valószínűleg nem is fogják felhasználni ezt a megoldást, de talán mégis segítség lehet valakinek. Ha van egy Excel-fájlunk, amiben különféle sheeteken szétszórva, elrejtve stb. vannak beágyazott objektumaink és egy summary sheetről kattintások alapján szeretnénk ezeket megnyitni (tehát nem linkeket akarunk, hanem egy cellára kattintva az ugyanabban az Excel-fájlban valahol beágyazott objektumunk nyíljon meg), akkor a következő út járható lesz.
A cél tehát az, hogy ha a D4-re (tehát a bekeretezett cellára) duplán kattint a felhasználó, akkor megnyíljon a példaként beszúrt kép-objektum. Menjünk át a VBA-editorba ALT+F11 lenyomásával, majd válasszuk ki, hogy az adott munkalap BeforeDoubleClick eseményéhez szeretnénk egy kódot hozzárendelni:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Ezután pedig meg kell határoznunk az eseményhez tartozó két paramétert, azaz ha a dupla kattintás abszolút hivatkozással a D4-es cellán történik (Target.Address), akkor szépen nyisson meg egy meghatározott névvel bíró beágyazott objektumot, majd tekintse megtörténtnek a dupla kattintást (Cancel = True).
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$D$4" Then
Sheets("Sheet1").OLEObjects("Object 1").Verb
Cancel = True
End If
End Sub
Ennyi lenne a történet. Az OLEObjects általában egy Active-X controlt, egy linkelt vagy beágyazott objektumot testesít meg, zárójelben mögötte nevesítjük is, hogy éppen melyiket. Az OLEObjects Verb metódusával pedig igazából műveletet tudunk végezni ezzel az objektummal, elég sok lehetőségünk van, amelyeket azonban az adott objektum forrásprogramja is meghatároz. Amennyiben nem adjuk meg a Verb paraméterét, akkor a default műveletet, a szerkesztést fogja végrehajtani, amire pont szükségünk is van.