我使用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
答案 0 :(得分:0)
Wait
和Sleep
将使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(“测量结束”) 退出子 结束如果
再次感谢。