5

以下を含む一連のコードがあります。

Application.Wait (Now + TimeValue("4:00:00"))

これは基本的に、午前 3 時 (コードの実行が終了するとき) から午前 7 時 (再開するとき) までの 4 時間の枠でマクロを一時停止することです。コードは本質的に無限ループにあります。

その間、ユーザーが特定のセルを編集できるようにしたいと考えています。私が試してみました

DoEvents

マクロを実行し続ける方法を見つけていませんが、マクロが何もしていない間、ユーザーに制御を提供します.

任意の洞察をいただければ幸いです。ありがとう!

編集:

追加の質問をもう 1 つ。このマクロは、実際のマクロ「Production_Board」を参照するために作成しました。このマクロを常に実行し、できるだけ頻繁に更新したいと考えています。goto startagain を使用することで、「ontime」遅延間隔のためにマクロが開始される前に、マクロの再起動を開始しようとします。

マクロ「Production_Board」が終了した瞬間に、サブ RunMacro を再び開始するにはどうすればよいですか?

Sub RunMacro
startagain:
Dim hour As Integer
Dim OT As String
hour = 0
OT = "Empty"
hour = Sheets("Calculations").Range("DR1").Value
OT = Sheets("Black").Range("D4").Value
If OT = "Y" Then
    If hour = 3 Or hour = 4 Then
    Application.OnTime TimeValue("05:00:00"), "Aespire_Production_Board"
    Else
    Application.OnTime Now + TimeValue("00:00:30"), "Aespire_Production_Board"
    End If
Else
    If hour = 3 Or hour = 4 Or hour = 5 Or hour = 6 Then
    Application.OnTime TimeValue("07:00:00"), "Aespire_Production_Board"
    Else
    Application.OnTime Now + TimeValue("00:00:30"), "Aespire_Production_Board"
    End If
DoEvents
GoTo startagain
4

2 に答える 2

9

の代わりにWait、 を試してくださいOnTime。実演するには、これを通常のモジュールに貼り付けて実行しますTest。アクティブなシートの範囲 A1 は 5 秒ごとに増加し、その間で作業することができます。5 秒が経過したときに編集モードになっている場合にも機能します。

Sub test()
    test2
End Sub

Sub test2()
    ActiveSheet.Cells(1, 1).Value = ActiveSheet.Cells(1, 1).Value + 1
    Application.OnTime Now + TimeValue("00:00:5"), "test2"
End Sub

OnTimeサブルーチンの最後のステートメントは、サブルーチンを再帰的に再度呼び出すことに注意してください。ここにいくつかの詳細情報があります。

于 2013-04-18T04:07:39.603 に答える
1
Sub mySub()
    Do
        If Time() >= #3:00:00 AM# And Time() <= #7:00:00 AM# Then
            Aespire_Production_Board
        End If
    DoEvents
    Loop
End Sub

mySub() を開始すると、無期限に実行されます。午前 3 時から午前 7 時の間、すべてのループで Aespire_Production_Board を実行します。また、ユーザーが対話できるようにします。コードは、CTRL-Break を使用してブレーク モードにすることができます。

于 2013-04-18T15:19:25.307 に答える