標準モジュールなどの一括エクスポート方法
このページでは標準モジュールの一括エクスポートについて紹介しています。
インポートについては「標準モジュール等の一括インポート」をご参照ください。
作成したマクロを他のブックでも使う方法
VBAを利用していると標準モジュールやフォームやクラスを作成していくことになりますが、作成したマクロを他のブックでも使いたいことがあります。汎用的に使うのであれば個人用マクロブック(personal.xlsb)に書くことも一つの方法ですが、そこまでではない、という場合もあります。
そういう場合はVBA画面を開き、コピー元のブックから標準モジュール等をエクスポートして、利用するブックでインポートすることでマクロの転用が可能です。
手作業ではエクスポートは1度に1ファイルしか出来ない
VBAのコードを書いた標準モジュールなどの他のブックに転用する際にエクスポートやインポートを行いますが、その作業で面倒なことがあります。
それはエクスポートとインポートがそれぞれ1ファイルずつしか行えないことです。
コピー元のブックが持つマクロが標準モジュール1ファイルだけ、などであればいいのですが、その他にも別の標準モジュールやフォームやクラスなどが複数あった場合は全てをエクスポートやインポートするのはかなり面倒です。
ここがVBAがプログラミング言語として弱い部分の1つです。一般的なプログラミング言語であればソースコードはテキストファイルとして扱うことが出来るため他のプログラムへの転用はファイルをコピーするだけで行えます。ところがVBAのソースコードはブックに紐づいているためテキストファイルをコピーするようには他のブックへ転用できません。
また、VBAはソースコードを独立して扱うことが出来ないためバージョン管理を行う場合にはいちいちエクスポートを1ファイルずつ行うという手間がかかります。これが本当に手間です。
その問題を解消するために、VBAの標準モジュールやクラスやフォームを一括してエクスポートするマクロで対応します。以下のマクロは個人用マクロブックpersonal.xlsbと通常のブックのどちらにも対応しています。
事前設定
VBAで一括エクスポートを行う前に、事前にExcelの設定を変更する必要があります。
エクスポートとインポートを可能にする
開発タブ→コード→マクロのセキュリティを開きます。
または、ファイルタブ→オプション→セキュリティセンター→セキュリティセンターの設定ボタン→マクロの設定、でもいいです。そこで「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する(V)」にチェックを付けます。このチェックを付けることで、VBAでの標準モジュールなどのエクスポートやインポートが可能になります。
あとは各ダイアログのOKボタンを押していきます。
これでエクスポートとインポートが可能になります。
VBComponentの参照設定
VBA画面のツールメニュー→参照設定で、「Microsoft Visual Basic for Application Extensibilly 5.3」にチェックをつけてOKを押します。
これによりVBComponentクラスとVBComponentsクラスの利用が可能になります。
VBComponentクラスはVBAProjectの標準モジュールやフォームやクラスの各ファイルの操作を行うことができるクラスです。
VBComponentsコレクションクラスは、そのブックに含まれる標準モジュールやフォームやクラスの全ファイルの管理を行うクラスです。
一括エクスポートのソースコード
以下のマクロは、対象ブックに含まれる標準モジュールなどを全てエクスポートするマクロです。
ソースコードの説明
ブックが開いていない場合はpersonal.xlsbをエクスポートする
このソースコードでは一つ特殊仕様を入れています。10行目から15行目がその部分です。
10行目と11行目では、ブックが1つも開いていない場合はアクティブのブックは存在しないため、個人用マクロブック(personal.xlsb)を処理対象としています。それとは逆に、13行目と14行目では、ブックが開いている場合はアクティブブックを処理対象としています。
私自身は一般のブックよりもpersonal.xlsbをエクスポートする方が多いため、そのときはブックを全部閉じてこのマクロを実行しています。
なお、個人用マクロブックをエクスポートする場合には注意が必要です。後述しています。
拡張子はcls、frm+frx、basの3種類
エクスポート対象ファイルの拡張子はcls、frm+frx、basの3種類です。
フォームのfrmファイルをエクスポートすると、一緒にfrxファイルもエクスポートされます。
Excelブックもモジュールではありますが、ソースコードではないためエクスポート対象にはしていません。
37行目の部分です。
エクスポート先はブックと同じフォルダ
42行目でエクスポートを行います。
エクスポート先はブックと同じフォルダです。
ファイル名はVBAのままで拡張子にはクラス(cls)、フォーム(frm, frx)、標準モジュール(bas)を付与しています。
ファイルのタイムスタンプはエクスポート実施日時になります。
個人用マクロブック(personal.xlsb)エクスポート時の注意
個人用マクロブックをエクスポートすると、XLSTARTフォルダに標準モジュール等が出力されます。なお、XLSTARTフォルダは以下にあります。
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Excel\XLSTART
それ自体は問題ないのですが、XLSTARTフォルダにあるファイルは、Excel起動時に全てExcelブック形式で開いてしまいます。
100個標準モジュールをエクスポートしていたらそれら全てが開かれます。
もしそれが面倒であれば個人用マクロブックのエクスポート後はXLSTARTフォルダから移動するか、9行目から17行目を以下のような感じに変更して個人用マクロブックの場合のエクスポート先を別のものにしておきましょう。
19行目のパス取得を個人用マクロブック用の12行目と、それ以外の16行目に分けています。
自分用の新規ブックのテンプレート置き場として使う分にはXLSTARTフォルダはとても有効ですので、是非活用してください。