Office VBA マクロでタイマーを使用する

ソフトウェアにタイマーを追加するための VBA マクロのコーディング

ラップトップ コンピューターの画面の外に表示されるストップウォッチ

ディミトリ・オーティス/デジタルビジョン/ゲッティイメージズ





深く心に刻む私たちのために VB.NET に戻る旅 VB6 混乱する旅行になる可能性があります。 VB6でタイマーを使用するのはそのようなものです。同時に、時間指定プロセスをコードに追加することは、VBA マクロの新しいユーザーにはわかりません。

初心者向けタイマー

コーディングWord で記述されたテストの時間を自動的に計る Word VBA マクロは、タイマーを使用する一般的な理由です。もう 1 つの一般的な理由は、コードのさまざまな部分にどれだけの時間がかかっているかを確認して、遅いセクションの最適化に取り組むことができるようにすることです。コンピューターがアイドル状態のように見えるときに、アプリケーションで何かが起こっているかどうかを確認したい場合があります。これは、セキュリティ上の問題である可能性があります。タイマーはそれを行うことができます。



タイマーを開始する

OnTime ステートメントをコーディングして、タイマーを開始します。このステートメントは Word と Excel で実装されていますが、どちらを使用しているかによって構文が異なります。 Word の構文は次のとおりです。

expression.OnTime(いつ、名前、許容範囲)



Excel の構文は次のようになります。

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

どちらも、1 番目と 2 番目のパラメーターが共通しています。 2 番目のパラメーターは、最初のパラメーターの時間に達したときに実行される別のマクロの名前です。実際、このステートメントのコーディングは、VB6 または VB.NET 用語でイベント サブルーチンを作成するようなものです。イベントは、最初のパラメーターの時間に達しています。イベント サブルーチンは、2 番目のパラメーターです。

これは、VB6 や VB.NET でのコーディング方法とは異なります。 1 つには、2 番目のパラメーターで指定されたマクロは、アクセス可能な任意のコードに含めることができます。 Word 文書では、Microsoft はそれを標準文書テンプレートに入れることをお勧めします。別のモジュールに配置する場合、Microsoft は完全なパスを使用することをお勧めします: Project.Module.Macro。



通常、式は Application オブジェクトです。 Word および Excel のドキュメントには、ダイアログまたはその他のプロセスによって特定の時間内に実行できない場合に、3 番目のパラメーターによってイベント マクロの実行をキャンセルできることが記載されています。 Excel では、そのような事態が発生した場合に備えて、新しい時間をスケジュールできます。

タイム イベント マクロのコーディング

この Word のコードは、テスト時間が経過したという通知を表示し、テストの結果を印刷したい管理者向けです。



Public Sub TestOnTime()
Debug.Print 「あと10秒でアラームが鳴る!」
Debug.Print ('Before OnTime: ' & Now)
alertTime = Now + TimeValue('00:00:10')
Application.OnTime alertTime、「EventMacro」
Debug.Print ('After OnTime: ' & Now)
サブ終了
サブイベントマクロ()
Debug.Print ('Executing Event Macro: ' & Now)
サブ終了

これにより、即時ウィンドウに次のコンテンツが表示されます。



アラームは10秒で鳴ります!
OnTime の前: 12/25/2000 7:41:23 PM
OnTime の後: 12/25/2000 7:41:23 PM
イベント マクロの実行: 2/27/2010 7:41:33 PM

その他の Office アプリのオプション

他の Office アプリケーションは OnTime を実装していません。それらについては、いくつかの選択肢があります。まず、Timer 関数を使用できます。この関数は、PC の午前 0 時からの秒数を返すだけで、独自の計算を行うか、Windows API 呼び出しを使用できます。 Windows API 呼び出しを使用すると、Timer よりも正確であるという利点があります。これは、トリックを実行する Microsoft によって提案されたルーチンです。



プライベート宣言関数 getFrequency Lib 'kernel32' _
Alias 'QueryPerformanceFrequency' (cyFrequency As Currency) As Long
プライベート宣言関数 getTickCount Lib 'kernel32' _
Alias 'QueryPerformanceCounter' (通貨としての cyTickCount) As Long
サブ TestTimeAPICalls()
Dim dTime As Double
dTime = マイクロタイマー
Dim StartTime As Single
StartTime = 時間
i = 1 ~ 10000000 の場合
Dim j As Double
j = Sqr(i)

Debug.Print ('MicroTimer 所要時間:' & MicroTimer - dTime)
サブ終了

関数 MicroTimer() を Double として
'
' 秒を返します。
'
Dim cyTicks1 を通貨として
通貨としての静的 cyFrequency
'
マイクロタイマー = 0
' 頻度を取得します。
cyFrequency = 0 の場合 getFrequency cyFrequency
' ティックを取得します。
getTickCount cyTicks1

If cyFrequency Then MicroTimer = cyTicks1 / cyFrequency
終了機能