スタイル

VBAプロジェクト名は固有のものに変更する

Wordのテンプレート(.dotm)やExcelのアドイン(.xlam)を新規作成すると、VBAプロジェクト名は自動的にデフォルトの名前に設定されます。Wordでは 「TemplateProject」、Excelでは 「VBAProject」 です。VBAアセットでは、これまでそのまま放置していました。

作成したマクロファイルを単独で使用している限り、プロジェクト名がデフォルトのままでも、特に動作上の問題は生じません。自分専用の単発ツールであれば、気にする必要はほとんどなく、VBAの解説本などでもほとんど取り上げられていないと思います。

しかし、複数のテンプレートやアドインをスタートアップフォルダに配置して常駐させたり、複雑な連携を行ったりする場合には、この「デフォルト名の重複」が予期せぬトラブルの引き金になることがあるようです。

複数のプロジェクト運用時に生じるリスク

スタートアップフォルダに複数のファイルを配置して運用する場合などにおいて、すべてのプロジェクト名が「TemplateProject」や「VBAProject」のままだと、以下のような問題が生じる可能性があります。

クイックアクセスツールバーでのマクロ名が区別しにくい

クイックアクセスツールバーにマクロを登録しようとすると、コマンドの候補一覧に以下のような表示が並びます。

Wordの場合:

TemplateProject.Module1.MacroName

TemplateProject.Module1.AnotherMacro

Excelの場合:

VBAProject.Module1.MacroName

VBAProject.Module1.AnotherMacro

頭につくのがすべて同じ名前になってしまうため、どのファイルの機能なのかが判別できない状態になります。VBAアセットがこの問題に気づいたのも、これがきっかけでした。

マクロの誤作動(競合)

Officeアプリケーションは、プロジェクト名が重複しているファイルが複数あると、内部的にそれらを区別しづらくなるようです。最悪の場合、「ファイルAのマクロを呼んだつもりが、ファイルBにある同名のマクロが勝手に実行された」ということも起こり得るようです。

参照設定ができない

VBAアセットではこれまで経験していませんが、あるファイルの機能を別のファイルから利用したい場合、「参照設定」を行う必要があります。しかし、VBAの仕様上、プロジェクト名が被っているファイル同士では参照設定を行うことができないようです。

これらの理由から、複数のファイルを扱う環境では、「VBAプロジェクト名は、すべてのファイルでユニーク(固有)にする」 するべきです。

VBAアセットの命名スタイル

上記のトラブルを回避し、管理を容易にするため、VBAアセットで作成・配布するツールでは以下の命名スタイルを採用することとしました。

VA + ファイル名の英訳

例えば、ファイル名が「VA公用文」であれば、プロジェクト名は 「VA_OfficialDocument」とします。

  • VA: VBA Assetsの略。他所のアドインと名前が被るのを防ぐための接頭詞(プレフィックス)です。
  • 英訳: 日本語を使うといろいろと問題が起きそうなので、ファイル名を表す英単語にします。

このルールで設定を行えば、クイックアクセスツールバーの登録画面でも、どのアドインのものなのかが明確になります。

VBAプロジェクト名の変更方法

VBAプロジェクト名の変更手順は以下のとおりです。

  1. 対象のファイルを開き、Alt + F11 でVBE(Visual Basic Editor)を開く。
  2. プロジェクトエクスプローラーで対象のプロジェクトを選択する。
  3. プロパティウィンドウ(表示されていない場合はF4キー)の「(オブジェクト名)」を確認する。
  4. ここを独自の英数字の名前に書き換える。

コメント

タイトルとURLをコピーしました