0

我编写了一个宏来从外部模拟工具中获取值并在 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 左右(并非始终不变)。

4

2 回答 2

0

看起来不错,但看看使用如下所示的 Application.OnTime。如果模拟没有返回数据会发生什么,你是否应该以更大的间隔构建,也许是 45 秒?

Application.OnTime Now + TimeValue("00:00:30"), "RunProcess"
于 2012-12-05T15:16:16.820 回答
0

我在代码中使用的“计时器”是罪魁祸首。计时器计算自午夜以来经过的秒数(以分数为单位)。所以当时间变成 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
于 2012-12-21T13:32:39.940 回答