簡體   English   中英

如何在 Power Point 中通過 VBA “刷新數據”?

[英]How to “Refresh Data” via VBA in Power Point?

到目前為止,我已經嘗試了Chart.RefreshChart.Update以及ChartData.UpdateLinks ,但都沒有工作。 我的問題與此類似,只是此代碼不適用於我的 ppt 如何更新 powerpoint 中的 excel 嵌入圖表?

如果我可以像在 Excel 中那樣錄制宏,步驟將是:

  1. 選擇圖表

  2. 圖表工具 >刷新數據

這是我設法編寫的代碼,但它在“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 以從 i=1 到 73,但作為測試,我使用幻燈片 3。並非所有幻燈片都有圖表,但大多數幻燈片都有 4 個圖表(73 個中的 65 個)。

我稍微更改了代碼,通過這個小小的更改,圖表的刷新再次自動進行。

很多時候,如果你分享你的 excel ppt 組合,鏈接會中斷,在恢復它們后,自動圖表刷新不起作用。

使用下行宏,自動刷新將再次工作:

Sub REFRESH()

    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

End Sub

下面的代碼位於 Excel 工作簿中的一個宏中,該宏還包含源數據。 不確定從 PowerPoint 運行它的代碼是否相同。 我只需打開我的 Excel 工作簿,然后讓它為我更新 PowerPoint。

我一直在尋找這個問題的答案,並最終通過大量閱讀和反復試驗設法讓它發揮作用。 我的問題是我的 PowerPoint 中有很多圖表是用 CTRL+C 和 CTRL+V 創建的,所以它們都沒有鏈接。 這就是我讓它工作的方式:

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

我不知道那里是否有不必要的代碼,但我很高興我終於讓它工作了,所以我不再碰它了。

此代碼有效。 但它只有在兩個文件都打開時才有效(如果只有一個,則為 excel):Power Point 和帶有數據的 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 位於共享位置,則代碼將無法運行,因為檢索數據需要花費太多時間。 我仍在尋找一種方法來做到這一點。 謝謝!

這可能會有所幫助,它會打開和關閉嵌入的 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM