2

特定の時点から特定の終了時点まで、毎秒などの非常に短い間隔で特定のマクロを実行しようとしています。これは、開始点とカットオフ点が必要であることを意味します。Workbook_Open() Eventワークブックを開いた後、別の時間に別のマクロをトリガーしているため、 を使用できません。

マクロを 1 秒に 1 回トリガーするために使用する基本的な行は、次の疑似コードです。

Application.OnTime Now + TimeValue("00:00:01"), "Path to Macro"

これまでの実験から、私が行った試みはいずれも 2 つの結果に終わりました。最初のケースでは、ワークブックを開いた瞬間から、1 秒に 1 回という適切なスケジュールで実行されました。ただし、最初のケースは、起動する前に少し待つ必要があったため、最適ではありませんでした。2 番目のケースでは、開始したい時間に実行されましたが、1 回しか実行されず、これも私が望んでいたことではありませんでした。

要約する:

ワークブックを開いてから 15 分後に実行を開始し、3 時間後に停止するには、コード行のようなものが必要です。

4

1 に答える 1

1

workbook_openから開始される他のタイミングマクロと、これらが干渉するのはなぜですか?不必要に自分を制限しているようです。この問題に対処する方法は次のとおりです。

Workbook_openは、application.ontimeを使用して、一般的な関数do_timed_eventsを呼び出す必要があります。do_timed_events関数は、実行されるたびにapplication.ontimeを使用して自身を再追加する必要があります。また、状態を追跡する必要があります。最初の数回の実行では、他の特定のタスクを実行し、15分待ってから、1秒ごとのタスクの実行を開始する必要があります。

ここにいくつかの擬似コードがあります:

private var do_timed_events_state as string
sub do_timed_events
   if do_timed_events_state = "" then
      do_task_1(arg1,arg2)
      do_timed_events_state = "task_2"
      Application.OnTime Now + TimeValue("00:00:01"), "do_timed_events"
   elseif do_timed_events_state = "task_2" then
      do_timed_events_state = "repeating_task"
      Application.OnTime Now + TimeValue("00:00:01"), "do_timed_events"
   elseif do_timed_events_state = "repeating_task" then
      Application.OnTime Now + TimeValue("00:00:01"), "do_timed_events"
   end if
end sub

あなたはおそらくこれで私よりも良いデザインを思い付くことができます。

于 2010-04-16T16:25:07.440 に答える