我编写了一个宏来从外部模拟工具中获取值并在excel中打印结果。模拟工具每30秒只会提供一次值,并且会运行数天。因此我在循环中给VB延迟了30秒。我一夜之间就跑了。在第二天早上,我可以看到在某些行之后没有更新结果。但是VBA编辑器标题显示宏正在运行,外部模拟工具也在运行。 excel中最后更新的行每次都不是常量。为什么VBA会停止在Excel中打印结果?任何帮助将不胜感激。
示例代码:
For l = 3 To lastrow1_mul + 2
Module4.Wait 30
nv = send_data.Call
Sheets(SecondSheetName).Range(SecondSheetCol_9 & l) = Hex(nv)
dv = DT.Call
If dv = 44 Then
Sheets(SecondSheetName).Range(SecondSheetCol_10 & l) = "A"
ElseIf dv = 54 Then
Sheets(SecondSheetName).Range(SecondSheetCol_10 & l) = "B"
Else
Sheets(SecondSheetName).Range(SecondSheetCol_10 & l) = "C"
End If
Next l
第4单元:
Function Wait(PauseTime As Single)
Dim StartTime As Single
StartTime = Timer
While Timer < StartTime + PauseTime
DoEvents
Wend
End Function
Send_data和DT是外部模拟工具的功能。变量lastrow1_mul的值在7000左右更新,但excel中的行停止在500左右打印(总是不是常数)。
答案 0 :(得分:0)
看起来不错,但请看下面使用的Application.OnTime。如果模拟还没有返回数据会发生什么,那么你是否建立了更大的,可能是45秒的间隔?
Application.OnTime Now + TimeValue("00:00:30"), "RunProcess"
答案 1 :(得分:0)
我在代码中使用的'Timer'是罪魁祸首。计时器计算自午夜以来经过的秒数(以分数计)。因此,当时间变为00.00.00时,它不会更新。所以我写的等待函数将继续等待! 这是解决方案
Function Wait()
Dim StartSecond As Single
Dim EndSecond
StartSecond = Now
EndSecond = DateAdd("s", 30, Now)
While Now < EndSecond
DoEvents
Wend
End Function