2016-10-31 3 views
2

Ich weiß, ich kann dies leicht tun, indem Sie auf Datei -> Links -> automatisch aktualisieren. Aus irgendeinem Grund führt dies jedoch zu Abstürzen auf den Computern anderer Benutzer. Ich denke, das könnte ein Kompatibilitätsproblem sein, da ich am Powerpoint 2016 bin. Ich habe ungefähr 30 Diagramme, die ich über ein Makro aktualisieren möchte. Jedenfalls habe ich versucht, den folgenden VBA zu verwenden, aber ich komme am Ende mit einem Pop-up von Excel, das sagt: Microsoft Excel wartet auf eine andere Anwendung, um eine OLE-Aktion abzuschließen. Dieses Pop-up tauchte nur für 15 Minuten auf.Problem beim Aktualisieren von Excel-verknüpften Charts in Powerpoint über VBA

Hilfe wäre sehr geschätzt, da ich mit Makros nicht sehr erfahren bin.

Sub ChangeChartData() 

    Dim pptChart As Chart 
    Dim pptChartData As ChartData 
    Dim pptWorkbook As Object 
    Dim sld As Slide 
    Dim shp As Shape 

    For Each sld In ActivePresentation.Slides 
     For Each shp In sld.Shapes 
      If shp.HasChart Then 
       Set pptChart = shp.Chart 
       Set pptChartData = pptChart.ChartData 
       pptChartData.Activate 
       Set pptWorkbook = pptChartData.Workbook 
       On Error Resume Next 
       'update first link 
       pptWorkbook.UpdateLink pptWorkbook.LinkSources(1) 
       On Error GoTo 0 
       pptWorkbook.Close True 
      End If 
     Next 
    Next 

    Set pptWorkbook = Nothing 
    Set pptChartData = Nothing 
    Set pptChart = Nothing 

End Sub 
+0

Was sagt das Popup/Alert von Excel konkret? Kannst du einen Screenshot hinzufügen? Was passiert, wenn Sie die Anweisung "On Error Resume Next" loswerden? –

+0

Datei -> Links -> automatisch aktualisieren - in der Regel * sollte nicht * crash per se, aber wenn Benutzer vom Netzwerk mit Zugriff auf die verknüpften Dateien getrennt werden, könnte dies ein Problem sein. Bei einer langsamen Netzwerkverbindung kann dies dazu führen, dass Sie hängen bleiben/nicht mehr reagieren, aber Sie müssen in der Regel nur warten *, bis die Dateien abgerufen werden. Dies sind unter anderem Gründe, warum OLE/eingebettete Diagrammdaten normalerweise schwierig und unzuverlässig sind. –

+0

Leider arbeite ich von zu Hause aus, daher kann ich keinen genauen Screenshot geben. Die Fehlermeldung besagt jedoch "Microsoft Excel wartet auf eine andere Anwendung, um eine OLE-Aktion abzuschließen" – Nikitau

Antwort

0

Eine Sache I ist bei dem Versuch interessiert sein würde, dies ändern:

On Error Resume Next 
'update first link 
pptWorkbook.UpdateLink pptWorkbook.LinkSources(1) 
On Error GoTo 0 

Um dies zu. (Ich habe früher gefragt, was passiert, wenn Sie On Error Resume Next entfernen und Sie nie geantwortet haben. Als allgemeine Regel sollten Sie das nie tun, es sei denn, Sie sind absolut sicher, dass Sie wissen, was Sie damit machen, und behandeln mögliche Fehler angemessen, in diesem Fall sind Sie wahrscheinlich nicht, aber ich weiß nicht, ob es Fehler gibt).

'On Error Resume Next 
'update first link 
pptWorkbook.UpdateLink pptWorkbook.LinkSources(1) 
'On Error GoTo 0 

Wenn die einen Fehler auslöst, bitte informieren, welche spezifische Fehlermeldung gegeben.

Wenn das keinen Fehler erhöhen, führt jedoch zu den gleichen Problemen, versuchen Sie stattdessen:

'On Error Resume Next 
'update first link 
pptWorkbook.UpdateLink pptWorkbook.LinkSources(1) 
'On Error GoTo 0 
Exit For '### Get out of the loop 

Wenn, wie Sie sagen, alle Pläne zu gleichen Daten verknüpft sind, dann denke ich, es ist sicher zu Exit For, um redundante Anrufe zu vermeiden, die nichts tun. Noch Problem, versucht:

'On Error Resume Next 
'update first link 
pptWorkbook.RefreshAll 
'On Error GoTo 0 
Exit For '### Get out of the loop 

Schließlich, und ich habe einigen Verdacht, dass dies tatsächlich funktionieren kann, dies versuchen. Sie haben gesagt, es gibt keine Formel Verweis oder externe Links (Datenbank, Text, Web-Abfragen, etc.), so dass es sollte nicht scheinenRefreshAll oder sogar UpdateLink scheinen sinnlos scheint. Wenn Sie das Diagrammdatenblatt aktivieren und es sofort schließen, scheint es, als ob es die Daten in der PPT-eingebetteten Excel-Tabelle und dem Diagramm aktualisieren sollte. Zumindest wenn ich auf einer Nicht-Bloomberg-Datei teste.

pptChartData.Activate 
Set pptWorkbook = pptChartData.Workbook 
'On Error Resume Next 
'update first link 
'pptWorkbook.UpdateLink pptWorkbook.LinkSources(1) 
'On Error GoTo 0 
pptWorkbook.Close True 
Exit For 

Hinweis: wieder möchten Sie die Exit For, weil es in Auffrischen der gleichen Datei 30 Mal keinen Sinn.

+0

Vielen Dank! Ich werde das morgen versuchen und Ihnen ein Update geben, wie die Dinge funktionieren. Ich bin nicht mit der Datei atm verbunden, aber ich könnte mit einigen zufälligen Excel-Dateien herumspielen und sehen, was passiert. – Nikitau

+0

Hallo. Nachdem Sie den ersten Vorschlag ausprobiert haben, fordert das Makro Excel auf, das Arbeitsblatt als neue Datei zu speichern. Das Pop-up zum Speichern wird weiterhin angezeigt, auch wenn ich eine neue Version davon speichere. – Nikitau

+0

Keine Ahnung, was dieses Verhalten verursachen würde. Springe zur letzten Option und schau, ob das funktioniert, aktiviere und schließe einfach die Arbeitsmappe ... –

0

Für mich gearbeitet:

For Each sld In ActivePresentation.Slides 
     For Each shp In sld.Shapes 
      If shp.HasChart Then 
       shp.Chart.ChartData.Activate 
       shp.Chart.ChartData.Workbook.UpdateLink shp.Chart.ChartData.Workbook.LinkSources(1) 
       shp.Chart.ChartData.Workbook.Close True 
      End If 
     Next 
    Next 

das heißt keine neuen Variablen nur zu schaffen mit den ursprünglichen arbeiten.

Verwandte Themen