2017-07-25 874 views
0

我知道这个问题已经被多次询问和回答,但不幸的是找不到工作解决方案。使用VBA更新PowerPoint图表

因此,我在PowerPoint中有一个非常简单的演示文稿(只有一张幻灯片,其中一张图表是从Excel表创建的),并且需要通过VBA更新最近的数据,无论是从Excel还是PowerPoint脚本运行。

首先,我想最明显的脚本从PowerPoint:

Sub update1() 
ActivePresentation.UpdateLinks 
End Sub 

它似乎运行,但不需要做任何改变。然后我开始在网上搜索解决方案,例如,找到以下topic on StackOverflow

对于Optimistic Busy的回答,它运行时没有错误,并在MessageBox中给我一个输出,但它在PowerPoint图表中没有任何变化。

的答案被rinusp它给了我一个错误

运行时错误“91”:对象变量或带块变量未设置

上线

For each sld in myPresentation.Slides 

我在PowerPoint中尝试了所有这些宏。

我也尝试过从StackOverflow的其他问题的答案,但不幸的是没有为我工作。如果有人帮助我找到任何工作解决方案,我会很高兴 - 如果VBA脚本运行,从Excel或PowerPoint中无关紧要。

在此先感谢。

UPDATE:我正在更新我的问题,我已经尝试运行的代码的完整示例。这个例子是由上面提到的StackOverflow主题的用户Optimistic Busy和rinusp提供的。

从PowerPoint运行时,该代码给我一个错误“运行时错误‘91’:对象变量或带块变量未设置”

Sub update2() 

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 

End Sub 

,并运行此代码没有错误,并给出了一个输出消息框但未更新图表

Sub update3() 
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 ("Update chart") 

End Sub 
+0

你好,你可以发布你正在努力工作的完整代码。该错误似乎与没有引用您正在与之交互的对象有关。 –

+0

@RyanWildry,我用完整的代码示例更新了我的问题。 – Hasek

回答

1

如果您在powerpoint中运行宏并且链接了图表,则此代码将起作用。

Sub update2() 

Dim myPresentation As PowerPoint.Presentation 
Dim sld As PowerPoint.Slide 
Dim shp As PowerPoint.Shape 
Dim myChart As PowerPoint.Chart 
Dim Wb As Object 
Dim App As Object 

Set myPresentation = ActivePresentation 

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 
      Set Wb = myChart.ChartData.Workbook 
      Set App = Wb.Application 
      Wb.Close (0) 
     End If 
    Next 
Next 
App.Quit 
End Sub 
+0

谢谢,它的工作原理。如果我想用另一个表格(在另一个Excel文件中)的数据更新图表并使用与原始结构类似的结构,您还可以解释如何修改它? – Hasek

+0

@Hasek,你可以在另一个Excel文件中。 –