2017-02-07 4 views
0

Ich baue ein Diagramm Automatisierung Skript in Powerpoint und ich habe jedes Problem beim Aufruf von "ActivateChartDataWindow".VBA Chart-Automatisierung mit ActivateChartDataWindow

Ich würde "Activate" anstelle von "ActivateChartDataWindow" verwenden, aber "Activate" lädt das vollständige Excel-Programm und lässt die gesamte Routine langsam und ulgy laufen.

Das Problem, das ich habe ist, dass "ActivateChartDataWindow" funktioniert, um die Diagramme zu füllen, aber wenn ich manuell gehen, um die Daten zu bearbeiten - klicken Sie mit der rechten Maustaste, Daten bearbeiten - um die Excel-Anwendung zu öffnen, scheint es nicht zu laden !

Es hat meine verrückt für die letzten 5 Stunden gefahren und würde mich über irgendwelche Ideen freuen, wie man das überkommt.

OLE.dlll funktionieren ordnungsgemäß und der Code, den ich verwende, ist unten angegeben.

-Code unten:

Es gibt 5 Dias mit einer Tabelle auf jeder Seite und den folgenden Code sind, was ich als ein Punkt des Konzepts

Ich habe bin mit einem Einschlag ich bin mit „ActivateChartDataWindow“ falsch , aber es gibt nicht viel im Internet zu wissen, was ich falsch mache! Arrrhhhh!

For i = 1 To 5 
     Set instance = Nothing 
     Set instance = ActivePresentation.Slides(i).Shapes(1).Chart.ChartData 
     With instance 
      .ActivateChartDataWindow 
      instance.Workbook.Sheets(1).Range("A1:H26").Value = 27 
      instance.Workbook.Close 
     End With 
    Next i 
End Sub 
+0

Warum überhaupt 'ActivateWhatever' verwenden? Es ist besser, direkt mit dem Objekt zu arbeiten, ohne es "aktivieren" zu müssen. –

+0

Von meinem Verständnis, müssen Sie das verdammte Ding aktivieren! Wenn ich nicht falsch liege? – Dianna

+0

Nein, das musst du nicht. Bitte versuche meine Antwort unten. –

Antwort

0

Wie immer empfohlen, brauchen Sie nicht zu Activate ein Objekt, um es zu ändern. Wenn Sie versuchen, ein in eine Folie eingebettetes Arbeitsbuch zu bearbeiten, können Sie dies auf diese Weise tun.

' This function will get you a Workbook object embedded in a Slide (late binding) 
Function getEmbeddedWorkbook(sld As Slide) As Object 
    Dim shp As Shape 
    On Error Resume Next 
    For Each shp In sld.Shapes 
     If shp.Type = 3 Then ' embedded chart workbook created in PP 
      Set getEmbeddedWorkbook = shp.Chart.ChartData.Workbook 
      Exit Function 
     End If 
     If shp.Type = 7 Then ' embedded workbook pasted from excel 
      Set getEmbeddedWorkbook = shp.OLEFormat.Object 
      Exit Function 
     End If 
    Next 
End Function 


' For Testing, I have 6 slides, Some have a workbook pasted from Excel 
' OLE, shape type = 7, others have a chart created in PP (type = 3) 
Sub Test() 
    Dim wb As Object, i As Long 
    For i = 6 To 6 'ActivePresentation.Slides.Count 
     Set wb = getEmbeddedWorkbook(ActivePresentation.Slides(i)) 
     If Not wb Is Nothing Then 
      wb.Sheets(1).Range("A1:D5").Value = i * i 
     End If 
    Next 
End Sub 
+1

Hallo Asche, Danke für die Köpfe hoch. Das werde ich definitiv vorhin geben. Die Arbeitsmappe ist jedoch in das Diagramm eingebettet. Würde dieser Code noch funktionieren? Ich schaue auf die Zeile .... shp.OLEFormat.Object) = "Arbeitsmappe", die auf die Arbeitsmappe als den Typename verweist – Dianna

+0

p.s. Ich nehme an, Sie fügen die Tabelle in PP mit PasteSpecial -> Excel Worksheet ein, oder? –

+0

Ja. Ich schätze, Sie werden einen besseren Weg vorschlagen? – Dianna