こんにちは、Ryoです。
VBEで標準モジュールやユーザーフォームを追加する場合はメニューの「挿入」から行い、削除やインポート/エクスポートなどもマニュアル操作で行うことが常ですが、これらをVBAの「Addメソッド/Removeメソッド/Importメソッド/Exportメソッド」を使って行うこともできますので、その内容について書いていきます。
1.事前準備
VBAからVBEを操作する為には設定として必要な事が二つあります。一つ目は「参照設定」でVBEの「ツール」から「参照設定」を選択し、「Microsoft Visual Basic for Applications Extensibility」を追加します。
二つ目はExcel側の設定になりますが、セキュリティセンターの中にある「マクロの設定」で「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックを入れます。
この二つの設定を行えば準備完了です。
2.サンプル概要/サンプルコード
◆モジュールなどの追加:Addメソッド
Sub Sample1() With ThisWorkbook.VBProject.VBComponents '***モジュールやフォームを追加*** MsgBox "標準モジュールを追加します" .Add vbext_ct_StdModule MsgBox "ユーザーフォームを追加します" .Add vbext_ct_MSForm MsgBox "クラスモジュールを追加します" .Add vbext_ct_ClassModule '******************* End With End Sub
モジュール等の追加はVBComponentsコレクションのAddメソッドを利用します。
オブジェクト.Add(component)
モジュールの種類を指定する場合は引数Componentに以下の値を設定します。
値 | 内容 |
vbext_ct_StdModule | 標準モジュール |
vbext_ct_MSForm | ユーザーフォーム |
vbext_ct_ClassModule | クラスモジュール |
このサンプルコードの動作としては以下の通りです。
上記コードが記述してある「Module1」がありますが、ここに「Module2(標準モジュール)」「UserForm1(ユーザーフォーム)」「Class1(クラスモジュール)」をメッセージボックス表示と交互に追加を実行していきます。
≪Module2追加≫
≪User Form1追加≫
≪Class1追加≫
◆モジュールなどの削除:Removeメソッド
Sub Sample2() With ThisWorkbook.VBProject.VBComponents '***モジュールやフォームを削除*** MsgBox "追加したモジュール2を削除します" .Remove .Item("Module2") MsgBox "同様に追加したユーザーフォームを削除します" .Remove .Item("Userform1") MsgBox "追加したクラスモジュールを削除します" .Remove .Item("Class1") '******************* End With End Sub
モジュールなどの削除を行う場合には、VBComponentsコレクションのRemoveメソッドを利用します。
オブジェクト.Remove(Component)
引数Componentに指定したモジュールを削除しますが、そのモジュールを指定するにはItemプロパティの引数にモジュール名を記述します。
.Remove .Item(“Module2”) モジュール2削除指定
.Remove .Item(“Userform1”) ユーザーフォーム1削除指定
.Remove .Item(“Class1”) クラスモジュール1削除指定
本サンプルの動作としては追加した「Module2(標準モジュール)」「UserForm1(ユーザーフォーム)」「Class1(クラスモジュール)」をメッセージボックス表示と交互に削除を実行していきます。
≪Module2削除≫
≪UserForm1削除≫
≪Class1削除≫
◆モジュールなどのインポート/エクスポート
Sub Sample3() With ThisWorkbook.VBProject '***追加モジュール(Module2)のエクスポート*** MsgBox "標準モジュールを追加します" .VBComponents.Add vbext_ct_StdModule MsgBox "追加したModule2をエクスポートします" .VBComponents("Module2").Export _ ThisWorkbook.Path & "\Module2.bas" '************************* '***標準モジュール(Module3)インポート*** '(前提:同保存先に"Module3.bas"が存在すること) MsgBox "Module3をインポートします" .VBComponents.Import ThisWorkbook.Path & _ "\Module3.bas" '*********************** '※ ファイル拡張子 標準モジュール「.bas」 ' クラスモジュール「.cls」 ' ユーザーフォーム「.frm」 End With End Sub
モジュールなどをインポート/エクスポートするにはImportメソッド/Exportメソッドを利用します。
オブジェクト.Import(filename)
引数filenameに対象のファイルを指定することでインポートしますので、サンプルでは同保存先に事前に準備した「Module3」を指定してインポートしています。
オブジェクト.Export(filename)
Exportメソッドは指定したモジュールをエクスポートしますので、構文の”オブジェクト”に対象のモジュールを指定し、引数filenameに保存するファイル名を指定します。
ちなみにサンプルコード内のコメントにも記述していますが、ファイルの拡張子「.bas:標準モジュール」「.cls:クラスモジュール」「.frm:ユーザーフォーム」となります。
本サンプルの動作としては、先ず標準モジュールを追加(Module2)し、そのModule2を同保存先にエクスポートします。次に同保存先にある「Module3」を指定してインポート指定います。
先ず標準モジュール(Module2)の追加
追加したModule2をエクスポート
同保存先にあるModule3をインポート
以上がモジュールなどの追加/削除/インポート/エクスポートを行う方法です。
3.まとめ
今回の内容は使いどころが限られるとは思いますが、VBAを使用してこのような操作を行うこともできるということを知っておくと後々役に立つこともあると思います。
本サンプルを書いて動作確認している中で気が付きましたが、私の環境ではエクスポートした対象モジュールを次行で直ぐに削除しようとしたらとエラーになりましたので、エクスポートと削除は連続的には使えないかもしれないという情報としてご参考までに。
以上、モジュールなどの追加/削除/インポート/エクスポートを行う方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo