Excel 如何";“刷新数据”;通过Power Point中的VBA?
到目前为止,我已经尝试了图表。刷新和图表。更新和图表数据。更新链接都不起作用。 我的问题与此类似,只是此代码不适用于我的ppt 如果我能像在Excel中那样记录宏,步骤如下:Excel 如何";“刷新数据”;通过Power Point中的VBA?,excel,vba,charts,powerpoint,Excel,Vba,Charts,Powerpoint,到目前为止,我已经尝试了图表。刷新和图表。更新和图表数据。更新链接都不起作用。 我的问题与此类似,只是此代码不适用于我的ppt 如果我能像在Excel中那样记录宏,步骤如下: 选择图表 图表工具>刷新数据 这是我设法编写的代码,但在“gChart.Application.RefreshData”中失败: 整数i包含在i=1到73之间,但作为测试,我使用幻灯片3。并非所有幻灯片都有图表,但大多数幻灯片都有4个图表(73个幻灯片中有65个)。这可能会有所帮助,它可以打开和关闭嵌入的Excel对
整数i包含在i=1到73之间,但作为测试,我使用幻灯片3。并非所有幻灯片都有图表,但大多数幻灯片都有4个图表(73个幻灯片中有65个)。这可能会有所帮助,它可以打开和关闭嵌入的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
这个代码有效。但只有当两个文件都打开时(如果只有一个文件,则为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 ppt组合,链接会断开,而在恢复链接后,自动刷新图表就不起作用了 使用downstanding宏,自动刷新将再次工作:
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
我不知道里面是否有不必要的代码,但我很高兴我终于让它工作了,所以我不再碰它了。可能需要做一个更改。在PPT 2016中,s.类型可能需要为=7,而不是MSOEMBededededeloObject。MSOEMBedededeloObject是一个定义的常量,从2016年回到PPT 97,VBA首次出现在PPT中时,在每个版本的PowerPoint中都是=7。只要代码在PowerPoint中运行,测试对象类型时常量或值都会起作用。对于共享位置问题,您是否尝试过使用任务计划程序打开所有共享文件,然后运行宏?或者,当共享文件已被其他用户打开时,您的代码不起作用?它起作用了,谢谢!由于此解决方案需要打开Excel和Power Point文件,因此消息框中可能会包含警告。例如:
MsgBox(“确保Excel和Power Point文件已打开”)
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