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

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

so far I have tried the Chart.Refresh and Chart.Update and also ChartData.UpdateLinks and neither work. My question is similar to this one only that this code did not work for my ppt How to update excel embedded charts in powerpoint?

If i could Record Macro like in Excel the steps would be:

1.Select Chart

2.Chart Tools > Refresh Data

This is code is what I have managed to write but it fails at "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 

The Integer i is included to go from i=1 To 73, but as a test i am using Slide 3. Not all Slides have Charts but most of them have 4 Charts (65 out of 73).

Thank you so very much for your help!! =)

回答1:

I changed the code a little bit and with this little change, the refresh of the charts works again automatically.

Many times, if you share your excel ppt combo the links break and after restoring them the automated chart refresh doesn`t work.

With the downstanding macro the automated refresh will work again:

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


edit The code below is in a macro in the Excel workbook which also contains the source data. Not sure if the code would be the same running it from PowerPoint. I simply open my Excel Workbook and then have it update the PowerPoint for me.


I have been looking forever to find an answer to this and finally managed to get it to work with a ton of reading and trial-and-error. My problem was that I have a PowerPoint with a lot of graphs that were created with CTRL+C and CTRL+V, so none of them are linked. This is how I got it to work:

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 

I don't know if there is unnecessary code in there but I am just happy that I finally got it to work so I'm not touching it anymore. Hope this helps you.



回答2:

This code worked. But it works only if both files are open (the excel if its only one): The Power Point and the Excel with the data. It actually Refreshes all charts one by one.

    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 

So, If the Excel is on a shared location, the code wont work because it takes too much time to retrieve the data. Im still looking for a way to do this. Thanks!



回答3:

This may help, It opens and closes the embedded Excel object

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 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!