Excelで複数のブックにマクロを組み込んで使用している場合、特定のブックが開かれているだけで他のブックのマクロが正常に動作しなくなることがあります。特に、ブック3のマクロ(c)のようにシートやブックの指定がないマクロは、意図せずアクティブシートやアクティブブックに依存するため、他のブックのマクロ(a)に影響を及ぼすことがあります。
マクロ(c)の影響の原因
ブック3のマクロは、Rangeオブジェクトを直接指定しており、どのブックやシートを対象にするか明示されていません。そのため、Excelのアクティブシートやアクティブブックを操作対象として扱います。これにより、ブック1やブック2のマクロ(a)がアクティブシートを前提として動作する場合、予期せぬ動作や無限ループが発生することがあります。
具体例として、マクロ(c)のSub RESET11AL()はRange(“B10”)を直接操作しています。このRange参照がアクティブブックのB10に作用するため、他のマクロが同じセル参照を用いると干渉が起きます。
干渉を防ぐ方法
干渉を防ぐには、マクロ内で操作対象を明示的に指定することが重要です。例えば、ブック名やシート名を明記してRangeを指定します。
例:
Workbooks(“BOOK3.xlsx”).Sheets(“Sheet1”).Range(“B10”) = …
ブック間で安全にマクロを動作させるポイント
1. Rangeやセル参照は常に対象ブックと対象シートを明示する
2. アクティブシートやアクティブブックに依存しないマクロ設計
3. 他ブックのマクロ実行中に干渉する可能性がある場合は、ブックを閉じるかマクロを無効化する
まとめ
マクロ(c)が起動していなくても、アクティブシートやブックに依存する設計であるため、他ブックのマクロ(a)に影響することがあります。干渉を回避するには、操作対象のブックとシートを明示してRangeやセルを参照することが最も安全な方法です。また、複数ブックを開いてマクロを実行する場合は、影響範囲を意識してマクロ設計を見直すことが推奨されます。


コメント