带延迟的Excel图表动态更新

时间:2017-05-26 18:52:00

标签: excel vba excel-vba charts wait

我使用Excel VBA从仪器读取数据线。 我想在读取后立即在Excel活动图表上动态绘制数据。 我需要等待并且每隔5秒读取一次数据,同时,通过VBA Application.Wait命令或通过Kernel32 Sleep命令“休眠”。 在任何一种情况下,活动图表都不会更新。完整的情节仅在最后一次“睡眠”之后出现。 任何建议将不胜感激。

这是简化代码

Sub New_Data(indx)
Dim x As Integer

While True

    x = Read_Instrument(1)
    y = Read_Instrument(2)
    Cells(indx, 1) = x
    Cells(indx, 2) = y

    ActiveSheet.ChartObjects.Item(1).Activate
    ActiveChart.FullSeriesCollection(1).XValues = "=Sheet1!$A$1:$A$" & indx
    ActiveChart.FullSeriesCollection(1).Values = "=Sheet1!$B$1:$B$" & indx

    indx = indx + 1
    Sleep 5000  'Use the KERNEL32 Sleep function for 5000 milliseconds
Wend
End Sub

2 个答案:

答案 0 :(得分:0)

WaitSleep将使VBA保持运行,因此屏幕不会更新。 尝试沿着这些行使用Application.OnTime(在标准代码模块中,即Module1)。

Sub refreshMyChart()
   Dim indx as long: indx = sheet1.Cells(Rows.Count, 1).End(xlUp).offset(1)

   Cells(indx, 1) = Read_Instrument(1)
   Cells(indx, 2) = Read_Instrument(2)

   With Sheet1.ChartObjects(1).FullSeriesCollection(1)
     .XValues = "=Sheet1!$A$1:$A$" & indx
     .Values = "=Sheet1!$B$1:$B$" & indx
  End With

  ''''' Now Schedule the same routine for 5 seconds later''''''''''
  Application.OnTime Now + TimeSerial(0,0,5), "refreshMyChart"
  ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Sub

p.s:请注意,此数据无法无限增长。您应该定义一些停止或删除旧行的方法,以保持显示的数据行数合理。

答案 1 :(得分:0)

出色!非常感谢你。 我不知道.OnTime构造  Application.OnTime Now + TimeSerial(0,0,5),“refreshMyChart” 以及VBA允许递归例程的事实。 至于结束循环,那里有代码,我没有发布,因为它与问题无关。这里是     如果Int(current_index / nmeasure)* nmeasure> finalval然后         MsgBox(“测量结束”)         退出子     结束如果

再次感谢。