Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何";“刷新数据”;通过Power Point中的VBA?_Excel_Vba_Charts_Powerpoint - Fatal编程技术网

Excel 如何";“刷新数据”;通过Power Point中的VBA?

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对

到目前为止,我已经尝试了图表。刷新图表。更新图表数据。更新链接都不起作用。 我的问题与此类似,只是此代码不适用于我的ppt

如果我能像在Excel中那样记录宏,步骤如下:

  • 选择图表

  • 图表工具>刷新数据

  • 这是我设法编写的代码,但在“gChart.Application.RefreshData”中失败:


    整数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