Az Excel és a PowerPoint között nem csak az a közös, hogy egy programcsomagba tartoznak és egy cég fejlesztései, hanem az is, hogy mindennapos gyakorlat Excel adathalmazok valamilyen formában történő bemutatása diákon keresztül, így a mai posztban Excel-adatokat fogunk átbűvészkedni PowerPointba egy roppant egyszerű VBA-kód segítségével, ami jó alapot fog szolgáltatni későbbi, hasonló Excel-PowerPoint kapcsolatos posztokhoz.
Szóval adott a következő egyszerű kis tábla:
Ezt és mondjuk tucatnyi másik társát szeretnénk áthegesztni egy PowerPoint diasorozatra automatikusan, hiszen akár rendszeres időközönként is várhatnak tőlünk ilyen jellegű tömény adathalmazt egy prezentáció sokadik diáján.
ALT+F11 lenyomásával lépjünk be VBA-editorba, majd hozzuk össze a kis kódunkat, amit aztán gombhoz rendelhetünk és a megfelelő táblák elkészítése után automatikusan legenerálhatjuk a templatünket is. A kódunk szokás szerint a változók deklarálásával kezdődik:
Sub ExcelbolPPT()
Dim rng As Range
Dim PP As Object
Dim prezi As Object
Dim dia As Object
Dim kep As Object
Az rng nevű változónk maga a dashboardunk tartománya lesz az Excel munkalapon, a PP-t magának a PowerPoint applikációnak hozzuk létre, a prezi nevű változót egy prezentációnak a PowerPointon belül, a dia nevűt ezen prezentáció egy diájának, a kep nevűt pedig a dashboardunk képformátumának, amikor már a dián leszünk.
A következő szegmensünkben egyrészt kicsit optimalizálni fogjuk a kódot (vagyis inkább gyorsítani) valamint a változókat feltölteni:
Application.ScreenUpdating = False
Set rng = ThisWorkbook.ActiveSheet.Range("A1:H7")
Set PP = CreateObject(class:="PowerPoint.Application")
Set prezi = PP.Presentations.Add
Set dia = prezi.Slides.Add(1, 11)
Azt már tudjuk, hogy az Application.ScreenUpdating kikapcsolásával nem fogjuk látni, mit csinál a makró, ergó egy kicsit gyorsabb lesz. Az rng változónk értelemszerűen felveszi a makrónknak is helyt adó munkafüzet aktív sheetjének megfelelő tartományát, a PP, objektum típusú változó pedig egy PowerPoint elindítása lesz a CreateObject funkció segítségével - a class paraméter fogja megadni, hogy milyen applikációról is beszélünk. A prezi nevű változó az elindított PowerPoint applikáción belül fog létrehozni egy új prezentációt, míg a dia változó a prezi változóban lévő prezentációhoz fog felvenni egy diát (a két paraméter közül az egyes a dia indexét jelenti, azaz ez lesz az első számú dia, a 11-es pedig az adott dia kinézetének paramétere, jelen esetben azt mutatja, hogy csak címsorunk van).
Ezután jön a kódunk harmadik része, az érdemi másolás és beillesztés:
rng.Copy
dia.Shapes.PasteSpecial DataType:=2
Set kep = dia.Shapes(dia.Shapes.Count)
kep.Left = 300
kep.Top = 152
PP.Visible = True
PP.Activate
End Sub
Az nem kérdés tehát, hogy az rng változóban lévő Excel-táblát fogjuk a vágólapra helyezni (másolni), majd utána ezt beillesztjük a PowerPoint-diánkra a Shapes.PasteSpecial metódus segítségével, amelynek DataType paraméterével határozhatjuk meg, hogy milyen formában szeretnénk is beilleszteni (képként, értékként stb.).
Ezután jön a feladat legkevésbé szeretett része, a pixelenkénti hegesztgetés, hogy hogyan is akarjuk látni a Dashboardunkat a dián. Elsőként a kep változónkba betöltjük a legutóbb beillesztett Shape-t (látjuk, hogy először megszámoljuk, hány Shape van egyáltalán a dián, hiszen ha van 3 darab, akkor minket a harmadik érdekel, mint legutoljára beillesztett), majd ezt fogjuk tologatni a dián mondjuk balról és fentről. Ha szépen meghatároztuk az elhelyezkedést, akkor már csak meg kell jelenítenünk a PowerPointot és azt kell aktív ablakba hoznunk, hogy lássuk az eredményünket.