Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1812to1816
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

Diagrammdaten aus PPT nach XLS kopiere

Diagrammdaten aus PPT nach XLS kopiere
12.02.2021 16:14:01
Marco
Hallo liebes Forum,
vielleicht kann mir jemand helfen: Ich möchte per VBA aus Excel heraus die Diagrammdaten aus einer geöffneten PowerPoint-Präsentation öffnen und in die Excel kopieren. Hintergrund: Die PowerPoints werden in einem anderen System generiert und das Kopieren nach Excel dient der Qualitätssicherung. Es geht um Präsentationen mit ca. 50 Diagrammen, davon häufig mehrere auf einem Chart.
Ich habe folgenden Code gebastelt, der auch funktioniert, wenn ich ihn in Einzelschritten _ ablaufen lasse. Bei einem normalen Ablauf tritt aber an scheinbar wahllosen Stellen das Problem auf, dass nicht die Datentabelle des PowerPoint-Diagramms nach dem Kopieren geschlossen wird, sondern die Zieldatei in Excel. Ich habe mit verschiedenen Versionen gespielt die Datentabelle mit und ohne Activate zu kopieren, das Problem tritt aber insbesondere bei großen Präsentationen immer wieder auf. Habt Ihr eine Idee? Hier der Code:

Sub PPTAuslesen()
Dim zeile, slnr, i As Integer
Dim pptApp, ppFile, ppSlide, ppShape As Object
Dim wks As Worksheet
Dim datawkb As Workbook
Set pptApp = GetObject(, "PowerPoint.Application")
Application.ScreenUpdating = False
On Error Resume Next
'Durchläuft die Slides
Set ppFile = pptApp.ActivePresentation
For Each ppSlide In ppFile.Slides
'Startwert für Zeilensprung
zeile = 1
'Neues Arbeitsblatt am Ende einfügen und mit der SlideNr. benennen
slnr = ppSlide.slidenumber
ThisWorkbook.Activate
ThisWorkbook.Sheets.Add _
After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
ActiveSheet.Name = "Slide" & slnr
Set wks = ThisWorkbook.ActiveSheet
'Shapes durchlaufen und Datentabelle kopieren
For Each ppShape In ppSlide.Shapes
If ppShape.Type = msoChart Then
ppShape.Chart.ChartData.Activate
Set datawkb = ActiveWorkbook
datawkb.Sheets(1).UsedRange.Copy
wks.Cells(zeile, 4).PasteSpecial Paste:=xlPasteValues
datawkb.Close
zeile = zeile + 15
End If
Next ppShape
Next ppSlide
'Leere Slides löschen
For i = ThisWorkbook.Sheets.Count To 1 Step -1
If WorksheetFunction.CountA(Worksheets(i).Cells) = 0 Then
Application.DisplayAlerts = False
Worksheets(i).Delete
Application.DisplayAlerts = True
End If
Next i
On Error GoTo 0
Set pptApp = Nothing
End Sub

Vielen Dank, Marco

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagrammdaten aus PPT nach XLS kopiere
12.02.2021 18:24:03
Yal
Hallo Marco,
die Anweisung
Set datawkb = ActiveWorkbook
scheint sich auf dem ppShape zu richten, ist aber nicht eindeutig. Versuche den Link zwischen den ppShape und dessen Workbook zu finden (z.b. im Schritt-Modus mit Lokal-Fenster, Siehe "Ansicht").
Dann wir gewährleistet, dass nicht das Excel-ActiveWorkbook gemeint ist, das danch in
datawkb.Close
geschlossen wird.
VG
Yal
AW: Diagrammdaten aus PPT nach XLS kopiere
13.02.2021 08:57:05
volti
Hallo Marco,
da das ganze ja in Excel abläuft bezieht sich, wie Yal schon vermutete, datawkb wegen des fehlenden Vorreferenz mit Sicherheit auf das Aktive Excelworkbook.
Probiere es doch mal so oder so ähnlich (ungetestet):
Tipp: Ich würde datawkb dann auch in ppDatawkb umbenennen, damit man auch schnell erkennt, dass PowerPoint gemeint ist.
 ppShape.Chart.ChartData.Activate
 Set ppdatawkb = ppShape.Chart.ChartData.Workbook
 ppdatawkb.Sheets(1).UsedRange.Copy
 wks.Cells(Zeile, 4).PasteSpecial Paste:=xlPasteValues
 ppdatawkb.Close
_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Diagrammdaten aus PPT nach XLS kopiere
13.02.2021 19:52:11
Marco
Hi Yal, hi Karl-Heinz,
vielen Dank, mit

Set ppdatawkb = ppShape.Chart.ChartData.Workbook
läuft es tatsächlich. Meistens jedenfalls. Manchmal kommt noch eine Fehlermeldung, dass Activate beim ChartData-Objekt nicht funktioniert hat. Habt ihr dazu noch eine Idee? In PowerPoint selbst kann ich die Datentabelle des betreffenden Diagramms nämlich problemlos öffnen.
Viele Grüße aus Köln,
Marco
AW: Diagrammdaten aus PPT nach XLS kopiere
13.02.2021 23:37:47
Yal
Hallo Marko,
da Du nicht mehr auf dem "Active"-Element zugreift, brauchst Du auch nicht es vorher zu aktivieren.
Activate kommt aus dem Marko-Rekorder, weil per Mausklick immer ein Element aktiviert wird, bevor darauf etwas gemacht wird. Wenn komplett über VBA, ist es nicht notwendig.
VG Yal
(M..-Rekorder: unabsichlich vertippt, aber weil es in dem Fall so schön ist, habe ich es gelassen ;-)
Anzeige
AW: Diagrammdaten aus PPT nach XLS kopiere
14.02.2021 14:17:39
Marco
Hi Yal,
so bin ich zu VBA gekommen: jemand hat den Makro-Rekorder gesucht und ist bei mir gelandet ;-)
Vielen Dank für die Rückmeldung. Ohne das .Activate der Datentabelle bricht das Makro aber leider mit einem "PasteSpecial konnte für das Range-Objekt nicht ausgeführt werden" ab, und zwar nicht immer beim selben Diagramm, aber viel früher als mit vorheriger Aktivierung der Datentabelle. Es ist fast so, als ob das Problem irgendwo im Zusammenspiel von PowerPoint und Excel liegt...ich poste noch mal den Code, so wie er jetzt ist, vielleicht übersehe ich was.
LG, Marco
Sub PPTAuslesen()
Dim zeile As Integer
Dim pptApp, ppFile, ppSlide, ppShape As Object
Dim wks As Worksheet
Dim ppdatawkb As Workbook
Set pptApp = GetObject(, "PowerPoint.Application")
Set ppFile = pptApp.ActivePresentation
For Each ppSlide In ppFile.Slides
zeile = 1
Set wks = ThisWorkbook.ActiveSheet '-> vorher wird in der Zieldatei jeweils ein neues  _
Blatt eingefügt
For Each ppShape In ppSlide.Shapes
If ppShape.Type = msoChart Then
'ppShape.Chart.ChartData.Activate
Set ppdatawkb = ppShape.Chart.ChartData.Workbook
ppdatawkb.Sheets(1).UsedRange.Copy
wks.Cells(zeile, 4).PasteSpecial Paste:=xlValues
ppdatawkb.Close
zeile = zeile + 20
Set ppdatawkb = Nothing
End If
Next ppShape
Next ppSlide
Set pptApp = Nothing
End Sub

Anzeige
AW: Diagrammdaten aus PPT nach XLS kopiere
14.02.2021 16:27:34
volti
Hallo Marco,
wenn es temporär immer wieder mal nicht geht, dann vielleicht mehrfach probieren. Hilft in anderem Zusammenhang auch immer ganz gut. Ggf. noch Rausspringer gegen Endlos-Schleife dazu.
Beispiel:
Code:

[Cc][+][-]

Sub PPTAuslesen() Dim zeile As Integer Dim pptApp, ppFile, ppSlide, ppShape As Object Dim wks As Worksheet Dim ppdatawkb As Workbook Set pptApp = GetObject(, "PowerPoint.Application") Set ppFile = pptApp.ActivePresentation For Each ppSlide In ppFile.Slides zeile = 1 Set wks = ThisWorkbook.ActiveSheet ' -> vorher wird in der Zieldatei jeweils ein neues _ Blatt eingefügt For Each ppShape In ppSlide.Shapes If ppShape.Type = msoChart Then On Error Resume Next Err = 0 ppShape.Chart.ChartData.Activate Loop Until Err = 0 On Error GoTo 0 Set ppdatawkb = ppShape.Chart.ChartData.Workbook ppdatawkb.Sheets(1).UsedRange.Copy wks.Cells(zeile, 4).PasteSpecial Paste:=xlValues ppdatawkb.Close zeile = zeile + 20 Set ppdatawkb = Nothing End If Next ppShape Next ppSlide Set pptApp = Nothing End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Diagrammdaten aus PPT nach XLS kopiere
15.02.2021 21:39:53
Marco
Hi Karl-Heinz,
vielen Dank für den Tipp mit der Loop. In Verbindung mit einem Zähler zeigt sich, dass sich die Diagrammdaten entweder beim ersten Ansprechen öffnen oder aber überhaupt nicht (bis 100 Loop-Schritte habe ich probiert). Über debug.print habe ich nur Folgendes beobachtet: Alle aktivierten Diagrammdaten werden als "Diagramm in PowerPoint" geöffnet, während die in einem Lauf nicht geöffneten Diagrammdaten als "MappeXY" geöffnet werden, wenn ich sie in PowerPoint direkt öffne. Vielleicht kann damit jemand was anfangen...
LG, Marco
AW: Diagrammdaten aus PPT nach XLS kopiere
15.02.2021 22:22:53
Yal
Hallo MArco,
MapXY scheint Office 365 oder Office 2019 zu sein. VBA-Info im Net scheint kaum vorhanden zu sein.
Wenn Du schon ein Code hast, dass sowas findet, kannst Du einen Überwachungausdruck verwenden, um den Code zu an der richtigen Stelle zu pausieren. Dann im Lokal-Fenster ein Blick auf die Eigenschaften un anschliessend in Objekt-Katalog mehr über MapXY zu finden. Dann wirst Du sicher das Daten-Element finden, dass dich ermöglicht, diese zu aktivieren.
Aber da Du jetzt direkt auf dem Workbook-Element zugreifen kannst, wozu brauchst Du noch das aktivieren?
VG
Yal
Anzeige
AW: Diagrammdaten aus PPT nach XLS kopiere
15.02.2021 22:49:18
Marco
Hi Yal,
okay, danke, schaue ich mir morgen an. Wegen des Aktivierens: Ohne Aktivieren funktioniert das Kopieren aus der Datendatei in die Zieldatei nicht. Das Makro läuft zwar durch, kopiert aber nix. Wäre natürlich super, weil es mit dem aktivieren ewig dauert.
VG, Marco
AW: Diagrammdaten aus PPT nach XLS kopiere
16.02.2021 11:15:03
Yal
Hallo Marco,
ich komme leider, ohne Activate, auf keine funktionierende Version, ausser Zellen einzel übertragen (mässige Performance)
        'Shapes durchlaufen und Datentabelle kopieren
For Each ppShape In ppSlide.Shapes
If ppShape.Type = msoChart Then
'            Methode Cell einzel übertragen
For Each Z In ppShape.Chart.ChartData.Workbook.Sheets(1).UsedRange.Cells
wks.Cells(zeile + Z.Row - 1, 4 + Z.Column - 1) = Z.Text
Next
zeile = zeile + 15
End If
Next ppShape
Ein "Dim Z" brauchst Du noch.
Application.ScreenUpdating = True fehlt noch.
VG
Yal
Anzeige
AW: Diagrammdaten aus PPT nach XLS kopiere
16.02.2021 22:48:28
Marco
Hi Yal,
super, vielen Dank, definitiv die erste Version, die stabil durchläuft. Das braucht zwar ca. 1 Minute für ca. 70 Diagramme, aber hey, per Hand würde das ewig dauern :-)
VG, Marco
Vielen Dank für die Rückmeldung. oT
17.02.2021 08:54:36
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige