【问题标题】:Update chart in Excel after every iteration of loop每次循环迭代后更新 Excel 中的图表
【发布时间】:2018-11-10 15:36:55
【问题描述】:

我正在尝试通过在迭代循环中生成其范围来为 Excel 中的参数曲线设置动画。我正在使用代码:

Public Sub playswirl()
    Range([a8], [a8].End(xlDown)).Clear
    Set cell = Range("a8")
    Do While cell.Offset(0, 1) <> ""
       cell.Offset(-1, 0).Copy cell
       ActiveSheet.ChartObjects(2).Chart.Refresh
       DoEvents
       Sleep (50)
       Set cell = cell.Offset(1, 0)
    Loop
End Sub

图表在第一条指令中被清除,然后在循环中一次重建一个项目。在代码运行时,我看到电子表格中的值一次更改一个,但图表从未更新(我看到完整的曲线,即执行第一行代码之前的状态)。当我 ctrl-break 并将代码置于调试状态时,图表会更新到代码被中断的位置。 我认为 chart.refresh 可以解决问题 - 并在不起作用时添加了 doevents 以作为良好的衡量标准 - 但没有运气。将 sleep 调用更改为 Excel-native Application.Wait 调用也无济于事(在任何情况下都太慢了)。 有什么想法吗?

【问题讨论】:

    标签: excel vba charts


    【解决方案1】:

    我认为图表可能没有问题;可能是更新系统的问题。如果 Application.ScreenUpdating = True (默认情况下),那么您可以尝试以下操作:

    • 尝试按照here 的说明将“DoEvents”添加到您的循环中。
    • 尝试在函数中添加“计算”。例如,编写代码 ActiveSheet.Calculate。

    让我知道这些进展如何。

    【讨论】:

    • 感谢您的回复。如我上面的代码所示,DoEvents 已经是循环的一部分。添加每个源单元格时立即执行计算(我看到随着循环的进行填充依赖单元格)。可以肯定的是,我将 Application.Calculate 添加到循环中,但它对解决问题没有帮助。