Anzeige
Archiv - Navigation
1444to1448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel-PP Diagramm Skalierung

Excel-PP Diagramm Skalierung
28.08.2015 11:26:57
Senseye
Grüßt euch Leute,
ich habe leider ein Problem mit meinem aktuellen Code
Ich hätte gerne die Diagramme skaliert und als Bild in PowerPoint, mit dem Code ist es ja nur eine Kopie und es lassen sich noch Eigentschaften ändern. Es soll ein Bildausdruck sein, an den man in PowerPoint nichts mehr kann.
kann mir da jemand weiter helfen?
Sub CreatePPT()
Dim ppt As Object
Dim oPPT As PowerPoint.Application
Dim oPrs As PowerPoint.Presentation
Dim oSld As PowerPoint.Slide
Dim oPct As PowerPoint.Shape
Dim oTxt As PowerPoint.Shape
Dim sPath As String
sPath = Application.DefaultFilePath & "/xl2ppt.ppt"
Set oPPT = CreateObject("PowerPoint.Application")
Set oPrs = oPPT.Presentations.Open("C:....")
'Öffnet die PPT-Vorlage
Sheets("Name").Select
ActiveChart.ChartArea.Copy
Set oSld = oPrs.Slides(1)
Set oPct = oSld.Shapes.Paste(1)
'Wählt das Diagramm aus und kopiert es in PPT-Vorlage
Sheets("Name").Select
ActiveChart.ChartArea.Copy
Set oSld = oPrs.Slides(3)
Set oPct = oSld.Shapes.Paste(1)
'Wählt das 2. Diagramm und kopiert es in die PPT-Vorlage
Sheets("Name").Select
ActiveChart.ChartArea.Copy
Set oSld = oPrs.Slides(5)
Set oPct = oSld.Shapes.Paste(1)
Set oPct = Nothing
Set oTxt = Nothing
Set oSld = Nothing
Set oPrs = Nothing
Set oPPT = Nothing
Application.Wait Now + TimeSerial(0, 0, 3)
Set ppt = GetObject(sPath)
End Sub
Grüße und vorab herzlichen dank :)

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ActiveChart.CopyPicture
28.08.2015 12:29:09
Michael
Hallo Senseye!
Hab es jetzt nicht an Deinem Code getestet, aber für das ActiveChart Objekt steht Dir auch die Methode CopyPicture zur Verfügung - damit übernimmst Du das Diagramm direkt als Bild in die Zwischenablage.
LG
Michael

AW: ActiveChart.CopyPicture
31.08.2015 08:14:04
Senseye
Hallo Michael,
leider kommt der Fehlercode 424, wenn ich
Sheets("Name").Select
CopyPicture.ChartArea.Copy
Set oSld = oPrs.Slides(1)
Set oPct = oSld.Shapes.Paste(1)
Verwende.
Grüße

AW: Das hab ich auch nicht geschrieben...
31.08.2015 10:04:05
Michael
Senseye,
... sondern, dass Dir das ActiveChart Objekt die Methode CopyPicture zur Verfügung stellt; so wie Du es jetzt geschrieben hast, wäre CopyPicture das Objekt.
Also statt
ActiveChart.ChartArea.Copy
nimmst Du
ActiveChart.CopyPicture
Klar?
LG
Michael

Anzeige
AW: Das hab ich auch nicht geschrieben...
31.08.2015 10:31:29
Senseye
Hallo Michael,
sorry, da stand ich wohl auf dem Schlauch :)
Hat schon mal super geklappt, allerdings platziert er das Bild irgendwo im Raum und nicht zentral auf die Folie, gibt es dafür auch einen Code?
Grüße

AW: Kann ich nicht nachstellen...
31.08.2015 10:57:14
Michael
Senseye,
...bei mir wird auf der aktuellen Folie zentriert eingefügt; mag damit zusammenhängen, dass ich es nur mit leeren Folien teste.
Evtl. probier's über PowerPoint-VBA mit
Windows(1).View.PasteSpecial (ppPasteJPG)
Das könnte sogar eine Alternative zum ActiveChart.CopyPicture in Excel sein, weil Du hier direkt in PowerPoint festlegst, dass Du als Bild einfügen willst.
LG
Michael

Anzeige
AW: Kann ich nicht nachstellen...
31.08.2015 11:27:46
Senseye
Hallo Michael,
ich hätte jetzt folgendes eingesetzt nach dem Paste
Windows(1).Selection.Copy
Windows(2).View.PasteSpecial DataType:=ppPasteOLEObject, _
DisplayAsIcon:=msoTrue, IconLabel:="New Bitmap Image"
Wie stelle ich die Verknüpfungen zu Windows 1 und Windows 2 her? Bin leider neu im VBA-Bereich
Grüße und schon mal vielen Dank!

AW: Kann ich nicht nachstellen...
31.08.2015 13:59:54
Senseye
Hallo Michael,
habe folgenden Code jetzt
Windows(1).Selection.Copy
Windows(2).View.PasteSpecial DataType:=ppPasteOLEObject, _
DisplayAsIcon:=msoTrue, IconLabel:="New Bitmap Image"
Nur weiß ich leider nicht, wie ich Windows (1) und Windows(2) auswählen kann.
Danke für deine Hilfe
Grüße

Anzeige
AW: Kann ich nicht nachstellen...
31.08.2015 15:07:13
Michael
Hallo Senseye!
Ich habe mir Deinen Code nie konkret angesehen, dachte es reicht Dir der Hinweis auf ActiveChart.CopyPicture. Mittlerweile hab ich das Gefühl Dein Code wird immer konfuser und wir verlaufen uns gerade in Details, ohne dass klar ist, was überhaupt gelöst werden soll.
Daher Angebot meinerseits: Kannst Du mir nochmal genau beschreiben, was Du eigentlich gerne über VBA in Excel lösen möchtest? Gib mir nochmal Bescheid bzgl.
- Wieviele Charts möchtest Du nach PowerPoint als Bild kopieren?
Wenn es mehrere aus einer Mappe sind - wie wurden die Diagramme eingefügt, als Diagramm-Blätter oder liegen die Diagramme jeweils als Objekte in den Tabellenblättern? Wenn die Diagramme direkt in Tabellenblättern liegen - liegen da auch mal mehr als eines? Wie wird ausgewählt, welches Diagramm kopiert werden soll?
- Werden die Charts in eine neue oder bestehende PowerPoint-Präsentation kopiert?
- Soll jedes Diagramm auf eine eigene neue Folie? Oder auf eine bestimmte bestehende Folie(nnummer)?
Dann schreibe ich Dir ein entsprechendes Makro - die Windows(x)-Spielereien sind aus meiner Sicht nicht notwendig ;-) - und bei Deinem ersten Code erschließt sich mir auch die Vorgehensweise noch nicht so ganz...
LG
Michael

Anzeige
AW: Kann ich nicht nachstellen...
31.08.2015 15:17:09
Senseye
Hallo Michael,
du würdest mir die Woche retten, sitze seit Ewigkeiten daran.
Also ich habe eine Excel-Datei, die neben Tabellenblätter insgesamt 15 Diagramme hat. Die Diagramme sind als Diagrammblätter hinterlegt und auf jedes Diagrammblatt ist auch nur ein Diagramm.
Nun soll auf eine vorhandene PPT-Datei zugegriffen werden, die aus 11 Folien besteht.
Folien 1,3,5,8,10,11 sollen jeweils nur ein Diagramm haben
Folien 2,4,6 sollen 2 Diagramme pro Folie haben
Folie 9 soll 4 Diagramme haben
Die Diagramme müssten auf bestimmte bestehenden Foliennummern zugeordnet werden.
Bedarf es noch einer genaueren Schilderung? Oder welcher Informationen?
Viele Grüße und ein großes Dankeschön

Anzeige
AW: Ok, schau ich mir an...
31.08.2015 15:33:55
Michael
Hallo Senseye!
Ich werde Dir was basteln, kann sein, dass ich heute nicht mehr dazu komme - aber ich melde mich dann morgen wieder!
LG
Michael

AW: Ok, schau ich mir an...
31.08.2015 15:43:49
Senseye
Hallo Michael,
Vielen Dank!!!!!

AW: Ein Ansatz...
01.09.2015 14:36:09
Michael
Hallo Senseye!
Puh, das ist doch schwieriger als ich dachte; ich mache nicht allzu viel hinsichtlich Excel zu PowerPoint und dachte ich kann hier schnell was basteln, aber dem ist nicht so - liegt sicher auch daran, dass mein PowerPoint VBA schwächer ausgeprägt ist als mein Excel VBA.
Dennoch... Einige Deiner Angaben waren widersprüchlich, zB:
Folien 1,3,5,8,10,11 sollen jeweils nur ein Diagramm haben
Folien 2,4,6 sollen 2 Diagramme pro Folie haben
Folie 9 soll 4 Diagramme haben

Das wären insgesamt 16 Diagramme; Du meintest aber in der Excel-Mappe sind insgesamt 15 Diagramm-Blätter. Außerdem war hier nicht klar ob die Foliennummer auch gleich der Diagramm-Nummer sein soll, also auf Folie 1 Diagramm 1 einfügen, auf Folie 3 Diagramm 3 einfügen usw. usf. Das müsstest Du für Dich zunächst definieren. Beachte hierbei: Deine Diagramm-Blätter sind, gem. ihrer Position in der Excel-Arbeitsmappe, von links nach rechts nummeriert. D.h. hast Du 15 Diagramm-Blätter ist das rechteste Diagramm-Blatt Chart(15).
Zu Deinen Foliennummern/Diagramm-Verteilung ist mir aktuell keine schlaue Idee für eine Schleife eingefallen, d.h. das Makro wird entsprechend lang, da alles in Einzelschritten passiert. Auch könnte man natürlich überlegen, ob man bspw. das Anordnen der Bilder auf den Folien in eine eigene Prozedur auslagert... Das ist dann aber sehr aufwändig. Deshalb...
Hier einmal ein Ansatz für Dich, den müsstest Du noch auf Deine Bedingungen erweitern - es ist je ein Abschnitt im Makro als Bsp gedacht um 1 Diagramm/Chart, 2 Diagramme/Charts bzw. 4 Diagramme/Charts jeweils auf eine bestimmte Folie als Bild zu übertragen und anzuordnen. Das ließe sich so oft wiederholen (=jeweiligen Abschnitt kopieren und im Makro hinzufügen), wie Du es brauchst. Anpassen musst Du auf jeden Fall den Dateipfad und -namen der PowerPoint-Präsentation sowie die jeweilige Diagramm-Blatt-Nummer bzw. Foliennummer. Das Makro ist soweit kommentiert, ich hoffe Du findest Dich zurecht. Wichtig ist v.a. auch den Verweis auf die PowerPoint Object Library zu setzen (s. Kommentar)
Sub DiverseChartsNachPowerPoint()
' Verweis auf PowerPoint Object Library erforderlich:
' im VB-Editor über Extras > Verweise > Microsoft PowerPoint 14.0 Object Library
' Häkchen setzen
Dim PoPt As Object
Dim PpDatei As Object
Dim Praes As String
Praes = "C:\... \Präs.pptx" 'Pfad und Name der Präsentation
Set PoPt = CreateObject("Powerpoint.Application")
PoPt.Visible = True ' Powerpoint sichtbar
Set PpDatei = PoPt.Presentations.Open(Praes) 'Präsentation öffnen
PoPt.ActiveWindow.ViewType = ppViewSlide 'Folienansicht einstellen
'       1 Chart auf 1 Folie als Bild übertragen
Charts(1).CopyPicture 'Chart 1 (als Chart-Blatt!)
PoPt.ActivePresentation.Slides(1).Select 'Folie 1
PoPt.ActiveWindow.View.Paste 'Bild einfügen
' Aktuelles Bild (= ausgewählt durch Einfügen) auf Folie anordnen
PoPt.ActiveWindow.Selection.ShapeRange.Left = 184.154
PoPt.ActiveWindow.Selection.ShapeRange.Top = 155.991
PoPt.ActiveWindow.Selection.ShapeRange.Width = 350
'       2 Charts auf 1 Folie als Bild übertragen
Charts(2).CopyPicture ' Chart 2 (als Chart-Blatt!)
PoPt.ActivePresentation.Slides(2).Select ' Folie 2
PoPt.ActiveWindow.View.Paste ' Bild einfügen
' Aktuelles Bild (= ausgewählt durch Einfügen) auf Folie anordnen
PoPt.ActiveWindow.Selection.ShapeRange.Left = 19.08858
PoPt.ActiveWindow.Selection.ShapeRange.Top = 167.9414
PoPt.ActiveWindow.Selection.ShapeRange.Width = 342.9902
Charts(3).CopyPicture ' Chart 3 (als Chart-Blatt!)
PoPt.ActivePresentation.Slides(2).Select ' Folie 2
PoPt.ActiveWindow.View.Paste 'Bild einfügen.Paste
' Aktuelles Bild (= ausgewählt durch Einfügen) auf Folie anordnen
PoPt.ActiveWindow.Selection.ShapeRange.Left = 363.9921
PoPt.ActiveWindow.Selection.ShapeRange.Top = 167.9414
PoPt.ActiveWindow.Selection.ShapeRange.Width = 342.9902
'       4 Charts auf 1 Folie als Bild übertragen
'Diagramm 4, 5, 6, 7 auf Folie 3
Charts(4).CopyPicture ' Chart 4 (als Chart-Blatt!)
PoPt.ActivePresentation.Slides(3).Select ' Folie 3
PoPt.ActiveWindow.View.Paste ' Bild einfügen
' Aktuelles Bild (= ausgewählt durch Einfügen) auf Folie anordnen
PoPt.ActiveWindow.Selection.ShapeRange.Left = 17.00976
PoPt.ActiveWindow.Selection.ShapeRange.Top = 92.4911
PoPt.ActiveWindow.Selection.ShapeRange.Width = 342.9902
Charts(5).CopyPicture ' Chart 5 (als Chart-Blatt!)
PoPt.ActivePresentation.Slides(3).Select ' Folie 3
PoPt.ActiveWindow.View.Paste ' Bild einfügen
' Aktuelles Bild (= ausgewählt durch Einfügen) auf Folie anordnen
PoPt.ActiveWindow.Selection.ShapeRange.Left = 360
PoPt.ActiveWindow.Selection.ShapeRange.Top = 92.4911
PoPt.ActiveWindow.Selection.ShapeRange.Width = 342.9902
Charts(6).CopyPicture ' Chart 6 (als Chart-Blatt!)
PoPt.ActivePresentation.Slides(3).Select ' Folie 3
PoPt.ActiveWindow.View.Paste ' Bild einfügen
' Aktuelles Bild (= ausgewählt durch Einfügen) auf Folie anordnen
PoPt.ActiveWindow.Selection.ShapeRange.Left = 17.00976
PoPt.ActiveWindow.Selection.ShapeRange.Top = 314.3366
PoPt.ActiveWindow.Selection.ShapeRange.Width = 342.9902
Charts(7).CopyPicture ' Chart 7 (als Chart-Blatt!)
PoPt.ActivePresentation.Slides(3).Select ' Folie 3
PoPt.ActiveWindow.View.Paste ' Bild einfügen
' Aktuelles Bild (= ausgewählt durch Einfügen) auf Folie anordnen
PoPt.ActiveWindow.Selection.ShapeRange.Left = 360
PoPt.ActiveWindow.Selection.ShapeRange.Top = 314.3366
PoPt.ActiveWindow.Selection.ShapeRange.Width = 342.9902
PoPt.ActiveWindow.ViewType = ppViewNormal ' Powerpoint-Ansicht "Normal"
PoPt.ActivePresentation.Save    ' Powerpoint-Präsentation speichern
PoPt.Activate   ' Powerpoint anzeigen
End Sub
Hoffe damit kannst Du mal arbeiten! Um Herauszufinden wie die Bildpositionen eingerichtet werden sollen (s. o. im Code .ShapeRange.Left, .Top, .Width) füge manuell ein Diagramm als Bild in PowerPoint ein und richte es so ein, wie Du es haben möchtest; danach direkt mit Alt + F11 in die PowerPoint VB-Umgebung wechseln und mit diesem Makro die Werte auslesen (im Direktfenster unten) - die kannst Du dann in Dein Excel-Makro übernehmen:
Sub BildPosition()
Dim i
Dim j
Dim k
i = PowerPoint.Application.ActiveWindow.Selection.ShapeRange.Left
j = PowerPoint.Application.ActiveWindow.Selection.ShapeRange.Top
k = PowerPoint.Application.ActiveWindow.Selection.ShapeRange.Width
Debug.Print i, j, k
End Sub
LG
Michael

Anzeige
AW: Ein Ansatz...
01.09.2015 15:58:27
Senseye
Hallo Michael,
ich weiß garnicht, wie ich dir danken soll. Ich habe den Code etwas angepasst und bis jetzt klappt echt alles ! Habe auch die Position festgesetzt und bin hin und weg! VIELEN VIELEN VIELEN DANK!

AW: Das freut mich...
01.09.2015 16:01:05
Michael
Senseye!
Vielen Dank für Deine wirkliche nette Rückmeldung!
Viel Erfolg noch!
Michael

Überschrift PP-Folie
07.09.2015 14:39:36
Senseye
Hallo Michael,
hätte noch zwei kleine Fragen, sofern du Zeit hast :)
Ich müsste jetzt eine TextBox als Überschrift für die Folien einsetzen, wie kann ich das am besten machen, sodass es zum Code passt?
Und wie könnte man den Code ändern, wenn man statt Diagrammblätter, Diagramme in einem Worksheet in eine Folie kopieren möchte?
Viele Grüße
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige