【问题标题】:Update Excel Chart at Run VBA Runtime在运行 VBA 运行时更新 Excel 图表
【发布时间】:2018-02-10 13:18:42
【问题描述】:

这个问题已经在不同的主题中讨论过,但解决方案对我没有帮助。我正在尝试计算和显示图表的一系列数据。类似“计算 y”-->“更新系列”--> 等待 100 毫秒-->“重新计算”。程序正在运行,但图表仅在 Main-Sub 完全完成时更新(而不是每 100 毫秒后)。

该系列完全基于 VBA 中的数组,不涉及 Cells。

当我在“睡眠”功能之后直接运行带有断点的程序时,图表会更新。

对我来说,DoEvents 和 chart.Refresh 方法并没有给我想要的结果。有人有想法吗?谢谢你们的帮助。

Sub Main()
Dim ws As Worksheet
Dim mychart As Chart
Dim ser As Series
Dim x(1 To 10) As Double
Dim y(1 To 10) As Double
Dim i As Integer

Set ws = ThisWorkbook.Sheets("Sheet1")
Set mychart = ws.ChartObjects("Chart 1").Chart

Call DeletePlot(mychart)

For i = 1 To 10
    x(i) = i
    y(i) = i
Next i


' Plot first data
Set ser = mychart.SeriesCollection.NewSeries
With ser
        .Values = y
        .XValues = x
End With


Dim j As Integer
For j = 2 To 4
    For i = 1 To 10
        y(i) = i ^ j    ' update data
    Next i
    With ser
        .Values = y     ' update series
    End With
    mychart.Refresh     ' Does not work
    DoEvents            ' Does not work
    Sleep (100)
Next j
End Sub

睡眠功能:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

PlotDelete 函数:

  Sub DeletePlot(mychart As Chart)
    Dim ser As Series
    For Each ser In mychart.SeriesCollection
      ser.Delete
    Next ser
  End Sub

【问题讨论】:

  • 如何为代码的第一部分创建一个函数(删除绘图+添加数据)并在重新计算 X 和 Y 后调用它。
  • 结果相同。图表仅在 Main 结束时更新。
  • 您在代码中的某处使用 application.screenupdating = false 吗?
  • 不,我贴的代码是完整的代码
  • 您是否尝试在第二个中使用 ser 块添加 x 数据?

标签: excel vba charts series


【解决方案1】:

Application.OnTime 之类的计时器或 Windows API 计时器(参见link)给了我想要的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多