【问题标题】:Updating linked Excel charts in PowerPoint在 PowerPoint 中更新链接的 Excel 图表
【发布时间】:2016-10-31 17:08:31
【问题描述】:

我可以通过转到文件 -> 链接 -> 自动更新来做到这一点。

但是,这会导致其他人的计算机崩溃。这可能是兼容性问题,因为我使用的是 PowerPoint 2016。

我有 30 多个图表要更新。

我尝试了以下 VBA,但最终从 Excel 弹出一个提示:

Microsoft Excel 正在等待另一个应用程序完成 OLE 操作。

这持续了 15 分钟。

Sub ChangeChartData()
    
    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
                Set pptWorkbook = pptChartData.Workbook
                On Error Resume Next
                'update first link
                pptWorkbook.UpdateLink pptWorkbook.LinkSources(1)
                On Error GoTo 0
                pptWorkbook.Close True
            End If
        Next
    Next
    
    Set pptWorkbook = Nothing
    Set pptChartData = Nothing
    Set pptChart = Nothing
    
End Sub

【问题讨论】:

  • Excel 的弹出窗口/警报具体说了什么?可以加截图吗?如果去掉 On Error Resume Next 语句会发生什么?
  • 文件 -> 链接 -> 自动更新 -- 通常这不应该本身崩溃,但如果用户从网络断开连接以访问链接文件,这可能是个问题。在慢速网络连接上,这可能会出现挂起/无响应的外观,但您通常只需要等待让它获取这些文件。这些是 OLE/嵌入式图表数据通常难以使​​用且不可靠的原因。
  • 不幸的是我在家工作,所以我不能给出一个准确的截图。但是,错误消息显示“Microsoft Excel 正在等待另一个应用程序完成 OLE 操作”
  • @DavidZemens 用户可以访问包含链接文件的网络。用户说他们等了 10 到 15 分钟才杀死 powerpoint。不幸的是,我们从包含高频数据的电子表格中获取图表并将其放入 .ppt 文件中,这样每次无需手动重新创建 ppt 就可以更轻松地更新 ppt。
  • 我已经看到了提示/警告,然后让我试着记住它的含义......

标签: excel vba powerpoint


【解决方案1】:

我有兴趣尝试的一件事是,改变这个:

On Error Resume Next
'update first link
pptWorkbook.UpdateLink pptWorkbook.LinkSources(1)
On Error GoTo 0

到这个。 (我之前询问过如果您删除 On Error Resume Next 并且您从未回答会发生什么。作为 一般 规则,除非您绝对确定您知道自己在做什么,否则您永远不应该这样做,并且正在充分处理潜在的错误,在这种情况下你可能没有,但我不知道是否有错误)。

'On Error Resume Next
'update first link
pptWorkbook.UpdateLink pptWorkbook.LinkSources(1)
'On Error GoTo 0

如果引发错误,请告知给出的具体错误消息。

如果这不会引发错误,但会导致相同的问题,请尝试以下操作:

'On Error Resume Next
'update first link
pptWorkbook.UpdateLink pptWorkbook.LinkSources(1)
'On Error GoTo 0
Exit For   '### Get out of the loop

如您所说,如果所有图表都链接到相同的数据,那么我认为Exit For 可以安全地避免无用的冗余调用。还是有问题,试试:

'On Error Resume Next
'update first link
pptWorkbook.RefreshAll
'On Error GoTo 0
Exit For   '### Get out of the loop

最后,我怀疑这可能真的有效,试试这个。您说过没有公式参考或外部链接(数据库、文本、网络查询等),所以 不应该 似乎有必要做一个 RefreshAll 甚至 UpdateLink 似乎毫无意义.只需激活图表数据工作表,然后立即关闭它似乎应该更新 PPT 嵌入的 Excel 工作表和图表中的数据。至少在我对非 Bloomberg 文件进行测试时是这样。

pptChartData.Activate
Set pptWorkbook = pptChartData.Workbook
'On Error Resume Next
'update first link
'pptWorkbook.UpdateLink pptWorkbook.LinkSources(1)
'On Error GoTo 0
pptWorkbook.Close True
Exit For

注意:同样你需要Exit For,因为刷新同一个文件 30 次是没有意义的。

【讨论】:

  • 非常感谢!我明天会试试这个,并告诉你事情是如何工作的。我没有连接到文件 atm,但我可能会玩一些随机的 excel 文件,看看会发生什么。
  • 嗨。在尝试第一个建议后,宏不断要求 Excel 将工作表另存为新文件。即使我保存了新版本,保存它的弹出窗口也会继续弹出。
  • 不知道是什么导致了这种行为。跳到最后一个选项,看看是否有效,只需激活并关闭工作簿...
【解决方案2】:

对我来说是这样的:

For Each sld In ActivePresentation.Slides
        For Each shp In sld.Shapes
            If shp.HasChart Then
                shp.Chart.ChartData.Activate
                shp.Chart.ChartData.Workbook.UpdateLink shp.Chart.ChartData.Workbook.LinkSources(1)
                shp.Chart.ChartData.Workbook.Close True
            End If
        Next
    Next

即不创建新变量,只使用原始变量。

【讨论】:

    【解决方案3】:

    我今天在同事的笔记本电脑上遇到了这种情况。要解决此问题,请在 Excel 中转到文件>信任中心>信任中心设置>外部内容选择顶部单选按钮启用所有数据连接

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多