Office Guru

Érdekes fejtörők beágyazott objektumokhoz kapcsolódóan

2017. március 09. - Office Guru

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.

001_3.bmpNos, 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:

002_2.bmpFelugrik egy eléggé magától értetődő kis ablak:

003_2.bmpItt 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:

005_1.bmpA 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.

object1_1.jpgA 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.

A bejegyzés trackback címe:

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

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.

Lionking7 2017.03.12. 23:36:33

Szia!

Nekem 2 problémám van beágyazott dokumentumokkal. Excelbe ágyazok be pdf-eket. Az egyik, hogy ha levédem a fület, akkor nem lehet megnyitni. Azt szeretném, hogy semmi mást ne tudjon csinálni (pl. elmozgatni vagy kitörölni), de megnyitni igen. A másik, hogy csak azzal a pdf olvasóval lehet megnyitni, amivel be lett szúrva. Pl. ha Adobe Readerrel lett beillesztve ikonként, de a másik gépen csak Foxit Reader van, akkor nem lehet megnyitni. Ezekre van valami (akár VBA-s) megoldás? Köszi!

Office Guru 2017.03.14. 19:56:13

@Lionking7: Szia!

Az első kérdésedre három javaslatom lenne, miután az Excel ezt nem fogja alapfunkcióként megoldani:

1. Ne ágyazd be a doksit, hanem linkelj rá.
2. Ha mindenképp beágyaznod kell, akkor az Edit Objects bepipálása a Protect Sheetnél az egyetlen lehetséges út, de engedi a usert, hogy törölje a fájlt
3. Így marad a VBA, azaz írni egy kis makrót, ami gyorsan leveszi a protectiont az Excel fájlról, megnyitja az objektumot, majd visszateszi a protection.

Office Guru 2017.03.14. 20:00:44

@Lionking7: A második kérdésedre a Foxit hivatalos guide azt javasolja, hogy

a Preferences menüben a "Use Foxit PhantomPDF to open embedded Acrobat files and embedded Foxit Reader PDF files in Microsoft Office" checkboxból vedd ki a pipát, majd kattints a Make default PDF viewers menüpontra.

Ezután ismételd meg ugyanezt, csak most tedd vissza az első pipát, majd úgy kattints a Make default PDF viewers menüre.
süti beállítások módosítása