VBA停止在Excel中打印值

时间:2012-12-05 12:24:55

标签: excel vba

我编写了一个宏来从外部模拟工具中获取值并在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左右打印(总是不是常数)。

2 个答案:

答案 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