如何在Power Point中通过VBA“刷新数据”?

到目前为止,我已经尝试了Chart.RefreshChart.Update以及ChartData.UpdateLinks ,都没有工作。 我的问题是类似于这一个,只是这个代码没有为我的ppt工作如何更新excelembedded图表在PowerPoint中?

如果我可以loggingmacros像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,但作为一个testing,我正在使用幻灯片3.不是所有的幻灯片都有图表,但其中大多数有4图表(65 73)。

非常感谢您的帮助! =)

我稍微更改了一些代码,然后用这个小改动,图表的刷新就会自动重新开始。

很多时候,如果你分享你的Excel PPT组合链接中断和恢复后自动图表刷新不起作用。

随着macros观的自动化刷新将再次工作:

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 

结束小组


编辑下面的代码在Excel工作簿中也包含源数据的macros中。 不知道如果代码将从PowerPoint中运行它相同。 我只是打开我的Excel工作簿,然后让它为我更新PowerPoint。


我一直在寻找永久的答案,并最终设法使其与大量的阅读和试​​错。 我的问题是,我有一个用CTRL + C和CTRL + V创build的很多图的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 

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

此代码工作。 但是它只在两个文件都打开的情况下才起作用(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位于共享位置,代码将无法工作,因为它需要太多的时间来检索数据。 我仍然在寻找一种方法来做到这一点。 谢谢!

这可能有所帮助,它打开和closuresembedded的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