PR

指定したセルに5秒ごとに新しい文字を入れる+そのタイミングで実行するものあり

▷A1セルに、5秒ごとに数字を入れる。数字は0~9を繰り返す。>>確認済み

この定期的に更新されるセルが変化することをトリガーにして、メール(テキストファイル)の取得の自動化に繋げる。

CheckTxtFiles   ‘ ←ここで呼ぶ

上のコードを追加して、A1セルが変更されたらこのsubが実行されるようにした。ここで呼び出すのは違うsubでも良いため、取得自動化が可能になるかもしれない。

Dim nextTime As Double
Dim currentNumber As Integer
 
'カウントする文字の初期化と、ScheduleNextRunのSubを呼び出す。
    '文字の初期化は1桁だけの方がすっきりするかなと0から9の数字を使うためにいれた。
Sub StartCounter()
    currentNumber = 0
    ScheduleNextRun
End Sub
 
 
'カウントスタートした時に呼び出されるSub A1に5秒ごとに数字を入力する動き
Sub ScheduleNextRun()
On Error GoTo ExitHandler
    Application.EnableEvents = False ' ここでイベントを一時停止
    'A1のセルに数字を書き込む
    Range("A1").Value = currentNumber
    '数字を0から9でループ。Mod10は10で割った余りっていう演算のため。
    currentNumber = (currentNumber + 1) Mod 10

CheckTxtFiles   ' ←ここで呼ぶ

ExitHandler:
    Application.EnableEvents = True ' 忘れずにイベント再開
    '次にこの処理を実行する時間を今から5秒後に設定
    nextTime = Now + TimeValue("00:00:05")
    'Excelに「nextTime の時間になったら ScheduleNextRun を実行」を予約する
    Application.OnTime nextTime, "ScheduleNextRun"
End Sub



'A1のセルにカウントしていくのをとめる
Sub StopCounter()
    'エラーが出ても処理を止めないようにする
    '>>例えば「次の実行予定がまだ登録されてない」のに止めようとするとエラーになる場合があるので、それを無視するため
    On Error Resume Next
    'Application.OnTimeは「指定した時間にマクロを実行する予約」を作るもので、ここで最後の引数にFalseをいれると予約キャンセルに。
    Application.OnTime nextTime, "ScheduleNextRun", , False
End Sub

スタートカウンターは、Excelをオープンした時に呼び起こす。ここに関して、エクセルを開いた時に二重にファイル取得が起こって変なことが起こる可能性があるから、スタートカウンターはExcelオープンから5秒後からスタートしとくといいかもしれないと思った。

Private Sub Workbook_Open()
    ' 5秒後に StartCounter を実行する
    Application.OnTime Now + TimeValue("00:00:05"), "StartCounter"
End Sub

これは、Thisworkbookのとこに貼ること。>>確認済み

スタートカウンターとストップカウンターは、更新開始ボタンと更新停止ボタンの2つを作って、紐づけるのもするといい気がする。