Office Guru

Excel-diagram átrántása PowerPoint diára egy kattintással

2017. február 18. - Office Guru

A mindennapok során elég gyakran felmerül olyan igény, hogy Excelben elkészített táblázatainkat, diagramjainkat PowerPoint prezentációban mutassuk be, adjuk elő egy kis extra körítés kíséretében - és szintén nem ritkaság, hogy hetente ugyanarról a témáról, ugyanabban a struktúrában kell prezentálnunk, egyedül csak az adatok változnak. Ilyenkor jól jöhet egy olyan automatizmus, amelynek keretében az Excelből egy gombnyomásra tudunk PowerPoint diára helyezni dolgokat - a következőben egy ilyen, egyszerű kis VBA kódot fogunk megnézni.

Adott tehát a következő diagram, amelyet Excelben készítünk el minden héten a bevételek heti alakulása alapján:

prezi1_1.jpgNyissuk meg ALT+F11 lenyomásával a VBA-editort, majd mielőtt elkezdenénk a kódot bevinni, végezzünk el egy beállítást. A Tools menü References menüpontjára kattintás után rendeljük hozzá projektünkhöz a Microsoft PowerPoint Object Libraryt:

prezi9_1.jpg

prezi10_1.jpgAztán már mehetünk is az editorba, hogy elkezdjük a tényleges munkát. Első lépésként mint mindig, most is deklaráljuk a változóinkat:

Sub ChartcopytoPPT()
Dim PowerPointApp As Object
Dim Presentation As Object
Dim PPTSlide As Object

Ahogy elég egyértelmű már az elnevezésből is, az első maga a PowerPoint applikáció, a második azon belül egy prezentáció, a harmadik pedig értelemszerűen egy dia - és elég egyértelmű, hogy ezekre miért is van szükségünk.

Hasonló kódok esetében ilyenkor általában mindig célszerű olyan vizsgálatot végezni, hogy fut-e már a Powerpoint vagy még nem, jelen kódban én most megengedem magamnak azt a luxust az egyszerűség jegyében, hogy ezt az ellenőrzést kihagyom. Így a változók után már indíthatunk is egy PowerPointot a PowerPointApp változó feltöltésével:

Set PowerPointApp = CreateObject(class:="PowerPoint.Application")

Ez az egyszerű kódocska nem fog túl nagy problémát okozni, de azért, hogy jól belénk ívódjon, célszerű belőni egy

Application.ScreenUpdating = False

utasítást is, ami nagyobb kódok esetén egyértelműen gyorsítja a futást, hiszen a képernyő nem frissül folyamatosan a kód futása közben.

Ha ez megvan, akkor jön a következő két változó feltöltése, elsőként a Presentation változó kezdő értékét állítjuk be egy új prezentáció létrehozásával:

Set Presentation = PowerPointApp.Presentations.Add

Majd folytatjuk azzal, hogy hozzáadunk egy diát ehhez a prezihez:

Set PPTSlide = Presentation.Slides.Add(1, 11)

Az első része ennek a feltöltésnek valószínűleg egyértelmű, az Add két paramétere közül az első pedig a slide számát jelenti, a második pedig az adott slide kinézetét, layoutját - jelen esetben ez egy szöveges headert tartalmazó dia lesz, a teljes lista megnézhető a Microsoft hivatalos oldalán.

Ezután már csak annyi van hátra, hogy megfogjuk az Excelben lévő diagramunkat és nyomunk rá egy másolást:

ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.ChartArea.Copy

Ez önmagában elég favágó kis kód, hiszen nevesítjük a pontos chartot, de értelemszerűen akinek több ilyen van, az nyugodtan bedobhat egy For ciklust, amellyel az összes chart objektumon végigmehet és mindegyiket átdobálhatja a PowerPointba.

A másolás után már csak a beillesztés van hátra:

PPTSlide.Shapes.PasteSpecial DataType:=2

Az adattípus paraméter sorszámát nem kell fejből tudnunk az összes változatra, a Microsoft hivatalos oldalán ott van az egész PasteSpecial metódus leírása pontos paraméterlistával - például jelen esetben a kettes egy default beillesztés, a kinézet és formátum megtartásával.

Ezután már csak annyi van hátra, hogy aktiváljuk és előhozzuk az eddig háttérben lévő PowerPointot, majd kipucoljuk a vágólapot:

PowerPointApp.Visible = True
PowerPointApp.Activate
Application.CutCopyMode = False

prezi2_1.jpgEzután már csak hozzá kell rendelnünk a makrónkat egy gombhoz és egy kattintás múlva már elő is állt a prezentációnk:

prezi3_1.jpg

prezi4_1.jpg

Ahogy látszik, ez egy roppantul lebutított, egyszerű kis kód simán tehetünk bele mindenféle módosításokat a chartunk elhelyezkedését, méretét illetően, de elég könnyen ráhúzhatjuk több chart másolására is. Remélhetőleg ugródeszkának a fenti megfelelő lesz.

Kódunk szövegként:

Sub ChartcopytoPPT()
Dim PowerPointApp As Object
Dim Presentation As Object
Dim PPTSlide As Object
Set PowerPointApp = CreateObject(class:="PowerPoint.Application")

Application.ScreenUpdating = False

Set Presentation = PowerPointApp.Presentations.Add
Set PPTSlide = Presentation.Slides.Add(1, 11)

ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.ChartArea.Copy

PPTSlide.Shapes.PasteSpecial DataType:=2

PowerPointApp.Visible = True
PowerPointApp.Activate

Application.CutCopyMode = False

End Sub

A bejegyzés trackback címe:

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

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.

J. McClane 2017.03.04. 06:20:12

Hello
Ez miben mas, mintha siman copy-paste megoldassal atmasolom? Akkor marad a kapcsolat az eredeti excellhez ami sok esetben ugyan nem jo, de neha meg az.
süti beállítások módosítása