ExcelのVBAで一定間隔ごとに処理を実行しようとした際に、「マクロが実行できない」「このブックでマクロが使用できない」といったエラーが出ることがあります。本記事では、Application.OnTimeを使った定期実行マクロで起こりやすい原因と、その正しい修正方法を整理します。
発生しているエラーの正体
今回のエラーは「マクロが無効」ではなく、OnTimeで指定したプロシージャ名の解釈ミスや実行コンテキストの問題で起きるケースが多いです。
特に「このブックでマクロが使用できない」と表示される場合、Excelが対象のマクロを正しく認識できていない可能性があります。
コード自体は一見正しく見えても、呼び出し方法に問題があることが多いです。
Application.OnTimeでよくある原因
OnTimeの最も典型的な問題は「プロシージャ名の指定方法」です。
例えば Procedure:”RegularInterval” のように書いた場合、Excelが別ブックのマクロとして認識できずエラーになることがあります。
また、ブック名を含めて明示的に指定していない場合も、実行対象が曖昧になります。
正しい書き方(修正版コードの考え方)
OnTimeを安定して動かすには、ブック名とマクロ名をセットで指定するのが基本です。
例:Procedure:”‘test1.xlsm’!RegularInterval” のようにフル指定することで、どのブックのマクロか明確になります。
また、マクロが標準モジュールに入っていることも重要です(シートモジュールだと認識されない場合があります)。
7秒間隔実行マクロの注意点
今回のような再帰的OnTime処理は、停止処理を用意しないと無限ループになります。
例えば停止用フラグを用意しないと、Excelを閉じるまで延々と実行され続ける可能性があります。
また、処理が重い場合はスケジュールが遅延することもあります。
安定して動かすためのポイント
安定動作のためには以下の点が重要です。
・マクロは標準モジュールに配置する
・Procedureにはブック名を含める
・停止処理を必ず用意する
これらを守ることで、OnTimeによる定期実行は安定して動作します。
まとめ
今回のエラーはマクロ無効ではなく、OnTimeの呼び出し方法やスコープ指定の問題である可能性が高いです。
特にブック名を含めた指定と、標準モジュールへの配置が重要なポイントになります。
構造を正しく理解すれば、7秒間隔の自動実行マクロも安定して動作させることができます。


コメント