0

外部のシミュレーション ツールから値を取得し、結果を Excel に出力するマクロを作成しました。シミュレーション ツールは 30 秒ごとに値を返し、数日間実行されます。したがって、ループで 30 秒間 VB に遅延を与えました。ランニングのために一晩放置します。翌朝、特定の行の後に結果が更新されていないことがわかりました。しかし、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

コードで使用した「タイマー」が原因でした。タイマーは、午前 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 に答える
0

問題ないように見えますが、以下に示す Application.OnTime の使用を見てください。また、シミュレーションがデータを返さなかった場合はどうなるでしょうか? 45 秒程度のより大きな間隔で構築するべきではありませんか?

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