【问题标题】:How to "Refresh Data" via VBA in Power Point?如何通过 VBA 在 Power Point 中“刷新数据”?
【发布时间】:2017-04-17 10:21:12
【问题描述】:

到目前为止,我已经尝试过 Chart.RefreshChart.Update 以及 ChartData.UpdateLinks ,但都不起作用。 我的问题与此类似,只是此代码不适用于我的 ppt How to update excel embedded charts in powerpoint?

如果我可以像在 Excel 中那样录制宏,步骤如下:

  1. 选择图表

  2. 图表工具 > 刷新数据

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

【问题讨论】:

    标签: excel vba charts powerpoint


    【解决方案1】:

    我稍微更改了代码,通过这个小小的更改,图表的刷新再次自动工作。

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

    我不知道里面是否有不必要的代码,但我很高兴我终于让它工作了,所以我不再碰它了。

    【讨论】:

      【解决方案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 位于共享位置,则代码将无法工作,因为检索数据需要花费太多时间。我仍在寻找一种方法来做到这一点。谢谢!

      【讨论】:

      • 对于共享位置问题,您是否尝试过使用任务计划程序打开所有共享文件,然后运行您的宏?还是当共享文件已被其他用户打开时,您的代码不起作用?
      • 成功了,谢谢!由于此解决方案需要打开 Excel 和 Power Point 文件,因此可以在消息框中包含警告。喜欢:MsgBox ("Make sure the Excel and Power Point files are open")
      【解决方案3】:

      这可能会有所帮助,它会打开和关闭嵌入的 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
      

      【讨论】:

      • 可能需要进行一次更改。在 PPT 2016 中,s.Type 可能需要为 = 7,而不是 msoEmbeddedOLEObject
      • msoEmbeddedOLEObject 是从 2016 年到 VBA 首次出现在 PPT 中的 PPT 97 的每个版本的 PowerPoint 中定义的常量 = 7。只要代码在 PowerPoint 中运行,常量或值在测试对象类型时都会起作用。
      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多