2012-12-05 103 views
0

我已经编写了一个宏来从外部模拟工具中获取值,并将结果打印在excel中。模拟工具只会每30秒给出一个值,并且会运行几天。因此我在循环中给了VB 30秒的延迟。我跑了一整夜。在第二天早上,我可以看到某些行后没有更新结果。但VBA编辑器头显示宏正在运行,并且外部仿真工具也在运行。 excel中最后更新的行每次都不是恒定的。为什么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是外部仿真工具的functions.Variable lastrow1_mul的价值得到7000左右更新,但在Excel行停止点500本身的印刷(并不总是)。

+0

我试过使用错误捕获块,但没有捕获任何错误。 –

+0

你需要提供一些代码/例子 – InContext

+0

@PhilipABarnes对不起,请问这个..我如何在这里添加一段代码。我试着在这里复制粘贴,但代码像段落一样。 –

回答

0

i的代码中使用的“定时器”是罪魁祸首。计时器计算自午夜以来流逝的秒数(分数)。所以当时间变成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 
0

看起来不错,但看看使用如下所示的Application.OnTime。如果模拟没有返回数据,又会发生什么情况呢?

Application.OnTime Now + TimeValue("00:00:30"), "RunProcess" 
+0

感谢您的回复。 RunProcess在这里有什么功能。它不会等待30秒,并且会触发Send_data.Call并引发运行时错误424-Object必需。模拟工作正常。我可以在窗口看到它。通过引入更多的延迟,我倾向于从第三次调用本身中丢失数值(在90秒时,我应该有3个数值没有模拟,但是通过使用45秒延迟,我只能得到2个数值。) –

+0

您的代码工作正常,没有看到大局,我很难建议。什么是外部模拟工具?无论如何,你将失去价值,就好像这个过程在15分钟后需要1秒钟,这会为你的经过时间增加30秒。我会看看simul工具,看看消息是否可以排队,或者您可以响应该工具触发的事件。 – InContext

+0

其矢量CANalyzer工具。主要用于汽车行业。你能解释一下15分钟后我将如何使用确切的延迟来丢失数值吗?我没有明白你的观点。 –