1

私はこれをやり遂げようとしてきましたが、おそらく近づいています。特定の時刻に実行する必要がある Access のコードがいくつかあります。Windows タスク スケジューラを使用したくありません。

だから私はこの機能を持っています:

Public Function RunProgram()
Dim RunDateFormat As String

RunDateFormat = Format(Now(), "HH:MM:SS")
    If RunDateFormat = ("15:30:00") Then

'Call these codes and other stuff in here

End If

次に、関数を呼び出すために Macro1 という名前のマクロを作成します。以下に示すように、オン タイマー フォームがマクロを呼び出します。

ここに画像の説明を入力

問題は、間隔を次のように設定した場合です。例: 1000、毎秒電子メールを受け取り、プログラムは実行を続けます。

助けてください:コードが正確な時間に実行されるように、これを設定する必要がありますが、1回だけです。

4

3 に答える 3

2

静的な日付変数を使用するのはどうですか:

static dateRan as date
if dateRan = Date then exit Function
If RunDateFormat = ("15:30:00") Then
dateRan = date
'Call these codes and other stuff in here
End If

このようにして、一晩実行し続けることができ、操作を停止するエラーが発生しないと仮定して、翌日には機能します。

ご承知のとおり、Access を介してスケジュールされたタスクを実行するには、フォームを起動して実行する必要があるため、時間に敏感なタスクの実行に失敗する可能性がかなり高くなります。可能であれば、タスク スケジューラを使用することを強くお勧めします。

HelloW で示唆されているように、コードが適切なタイミングで実行されることが重要でない限り、毎秒チェックすることはしません。重要な場合は、いくつかのチェックを行い、timerinterval をプログラムで変更することをお勧めします。

そのようです:

If Hour(Now) < 14 or Hour(Now) >= 16 then
    me.TimerInterval = 3600000
else
    me.TimerInterval = 30000
end if

時間に敏感なコードを実行する必要がある時間に近づくほど、チェックをより頻繁に実行するように、さらに絞り込むことができます。

于 2012-12-12T21:12:45.147 に答える
1

フォームのタイマー イベント プロシージャで時間チェックを行います。

Private Sub Form_Timer()
    If TimeValue(Now()) >= #15:30:00# Then
        ' run your job, then turn off the timer
        Me.TimerInterval = 0
    End If
End Sub

上記のコードに基づくアプローチにより、時間チェックを行うたびにメールを送信することを回避できるはずです。

あなたのアプリケーションがシングル ユーザー アプリケーションでない場合、この状況はより複雑になる可能性があります。2 人以上のユーザーが午後 3 時 30 分にフォームを開いた場合、全員がジョブを実行する必要がありますか? 彼らはできますか?OTOH、ジョブがユーザー固有の場合、それが必要な場合があります。

于 2012-12-12T21:17:27.043 に答える
0

これに変更Format(Now(), "HH:MM:00")するFormat(Now(), "HH:MM:SS") と、探していると思われる秒が得られます。ベスト プラクティスとして、これを毎秒実行するのは良い考えではないと思います。毎分または15分ごとにテストしてください。

于 2012-12-12T21:11:57.480 に答える