【问题标题】:Excel 2013 vba refresh chart content after each iteration of For Loop每次For循环迭代后Excel 2013 vba刷新图表内容
【发布时间】:2015-09-06 23:29:09
【问题描述】:

问题:每次 for 循环迭代后刷新 ChartObject 中 Series 的图形表示

Ex. y=m*Cos(x) 
y - Values
m - parameter

我有一些从带有参数的公式中计算出来的数据。我想可视化参数变化对 XYgraph 的影响。我想在 for 循环中执行此操作(添加 Sleep 确实有一些时间来查看结果)。 数据和公式在 Excel 电子表格中。参数的更新脚本在 VBA 模块中。更新适用于电子表格中的值,但不影响图表。

WorkBook.RefreshAll 不起作用; Chart.Refresh 不起作用

上次迭代后的图表更新。

有什么想法吗?

【问题讨论】:

    标签: excel vba loops iteration refresh


    【解决方案1】:

    在每个迭代步骤后将DoEvents 添加到您的代码中。它对我有用。

    【讨论】:

    • 感谢 Vacip。奇迹般有效! DoEvents 有效。 DoEvents+Sleep 已死。
    • 你可以试试application.wait而不是sleep。缺点是那里的最短时间是一秒。好处是它不依赖于 CPU 滴答声(sleep 是)。
    【解决方案2】:

    在 Office 365 的 Excel 中,我让 XYChart 实时更新仅以这种方式工作(XYChart 将在每个 For 循环迭代轮次期间/结束时更新)。我根本无法让Sleep() 工作。不幸的是Application.Wait的刻度分辨率是1秒,所以动画可能比较慢。 <chartObject>.Chart.Refresh 也没有达到预期的效果(用于在 For 循环期间自动更新)。

    注意:您的情况可能不需要下面的某些代码(至少 Application.ScreenUpdating 应该默认为 ON)。

    Application.ScreenUpdating = True    
    ActiveSheet.ChartObjects(1).Activate
    

    ...

        For i = 1 To 10
           'Chart source data cells manipulation/update and other chart related routines here.'
    
           ActiveSheet.ChartObjects(1).Activate
           Application.Wait (Now + TimeValue("00:00:01"))
           DoEvents
       Next i
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      相关资源
      最近更新 更多