2016-12-02 19 views
1

到目前爲止,我已經試過Chart.RefreshChart.UpdateChartData.UpdateLinks也不工作。 我的問題是類似這樣的僅此代碼並沒有爲我的PPT How to update excel embedded charts in powerpoint?如何「刷新數據」通過VBA在電源點?

工作,如果我可以錄製宏象Excel中的步驟將是:

1.Select圖

2 .Chart工具>刷新數據

這是代碼是什麼我已經成功地寫,但在「gChart.Application.RefreshData」失敗:

Sub refreshchart() 
    Dim ppApp As PowerPoint.Application, sld As Slide 
    Dim s As PowerPoint.Shape 
    Dim gChart As Chart, i As Integer 
    ppApp.Visible = True 
    i = 3 
    Set sld = ActivePresentation.Slides(i) 
    sld.Select 
    For Each s In ActivePresentation.Slides(i) 
    If s.Type = msoEmbeddedOLEObject Then 
    Set gChart = s.OLEFormat.Object 
    With gChart.Application 

    gChart.Application.Refresh 
    Set gChart = Nothing 
    End If 
    Next s 

End Sub 

的整數被包括我從i到去= 1至73,但作爲一個測試我使用幻燈片不是所有的幻燈片有圖表但是大多有4個圖表(65選自73)。

謝謝你這麼多的幫助! =)

回答

0

我改變了代碼一點點,這一變化不大,圖的刷新再次自動工作。

很多時候,如果您分享您的Excel PPT組合的鏈接斷裂,恢復它們的自動刷新圖表工作`噸後。

隨着下延宏自動刷新將重新工作:

副刷新()

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 
      shp.Chart.REFRESH 

      On Error Resume Next 
      On Error GoTo 0 

     End If 
    Next 
Next 

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

結束子


編輯 下面的代碼是在宏在Excel工作簿中也包含源數據。不知道該代碼是否與PowerPoint中運行的代碼相同。我只需要打開我的Excel工作簿,然後把它更新的PowerPoint我。


我一直在尋找永久的答案,並最終設法讓它與大量的閱讀和試​​驗和錯誤工作。我的問題是我有一個包含很多用CTRL + C和CTRL + V創建的圖表的PowerPoint,所以它們都沒有鏈接。 這是我得到它的工作:

Dim myPresentation As PowerPoint.Presentation 
Dim sld As PowerPoint.Slide 
Dim shp As PowerPoint.Shape 
Dim myChart As PowerPoint.Chart 

For Each sld In myPresentation.Slides 
    For Each shp In sld.Shapes 
     If shp.HasChart Then 
      Set myChart = shp.Chart 
      myChart.ChartData.Activate 
      myChart.Refresh 
     End If 
    Next 
Next 

我不知道是否有在那裏不必要的代碼,但我只是高興的是我終於得到它的工作,所以我不接觸它了。希望這可以幫助你。

0

這可以幫助它打開和關閉嵌入Excel對象

For Each s In ActivePresentation.Slides(i) 
    If s.Type = msoEmbeddedOLEObject Then 
     s.Select        'select the object 
     s.OLEFormat.Activate     'Activate it (like 2x click)) 
     ActiveWindow.Selection.Unselect  'To let it close 
     ActiveWindow.View.GotoSlide s.Slideindex 'make current slide active 
    End If 
Next s 
+0

可能需要一個更改。在PPT 2016中,s.Type可能需要= 7,而不是msoEmbeddedOLEObject – mooseman

+0

謝謝@mooseman –

+0

有沒有這樣的工作? – mooseman

1

此代碼工作。但它只能如果兩個文件打開(在Excel中如果只有一個):受力點,並與數據的Excel中。它實際上刷新所有圖表一個接一個。

Sub updatelinks() 
Dim sld As Slide, shp As Shape 

For Each sld In ActivePresentation.Slides 

    For Each shp In sld.Shapes 
    On Error Resume Next 
    shp.LinkFormat.Update 
    Next 

Next 

MsgBox ("Graficos actualizados con éxito") 

End Sub 

所以,如果Excel位於共享位置,代碼將無法工作,因爲它需要太多時間來檢索數據。我仍然在尋找一種方法來做到這一點。謝謝!