如何刷新数据"通过Power Point的VBA?

时间:2016-12-02 13:28:41

标签: excel charts powerpoint powerpoint-vba

到目前为止,我已经尝试了 Chart.Refresh Chart.Update 以及 ChartData.UpdateLinks ,但都无法正常工作。 我的问题与此类似,只是这段代码对我的ppt不起作用 How to update excel embedded charts in powerpoint?

如果我可以像在Excel中一样录制宏,那么步骤将是:

1.选择图表

2.Chart Tools> 刷新数据

这是我设法编写的代码,但它在" 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个)。

非常感谢你的帮助!! =)

3 个答案:

答案 0 :(得分:4)

我稍微更改了代码,只需稍加更改,图表的刷新就会自动恢复。

很多时候,如果您共享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

我不知道那里是否有不必要的代码,但我很高兴我终于让它工作了所以我不再触摸它了。希望这会对你有所帮助。

答案 1 :(得分:2)

此代码有效。但它只有在两个文件都打开时才有效(如果只有一个文件,那就是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位于共享位置,则代码将无法工作,因为它需要太多时间来检索数据。我还在寻找一种方法来做到这一点。谢谢!

答案 2 :(得分:0)

这可能会有所帮助,它会打开和关闭嵌入的Excel对象

TABLE_QUERY()