Dashboardból prezentáció

2018. március 15. - Office Guru

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:

pp1.JPG
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.

eredmeny.JPG

A bejegyzés trackback címe:

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

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.

Csut Andras 2018.03.29. 07:36:25

Szia!

Köszönöm a kódot, jól működik.
Alapból van a dián egy TextBox, azt letörlöm.

dia.Shapes(dia.Shapes.Count - 1).Delete

Utána próbálok egy saját TextBox létrehoni egy szöveggel, de nem működik.
Tudsz ebben segíteni nekem?

Dim myTextBox As Shape 'a sub elején deklarálom
Set myTextBox = PP.dia.Shapes.AddTextbox(msoTextOrientationHorizontal, 10, 10, 500, 200)
myTextBox.TextFrame.TextRange.Text = "ez legyen kiírva"

Office Guru 2018.04.29. 21:41:13

@Csut Andras:

Set textbox = ActivePresentation.Slides(1).Shapes.AddTextbox( _
Orientation:=msoTextOrientationHorizontal, _
Left:=1, _
Top:=250, _
Width:=720, _
Height:=100).TextFrame.TextRange

textbox.Text = "Helloszia"