VBAのモジュールを個別もしくは一括でインポートする。
エクスポートされたモジュール(標準モジュール・クラス・ユーザフォーム・ExcelObjects)をVBAでインポートするにはVBComponentsコレクションのImportメソッドを利用することでできます。
ExcelObjectsをエクスポートしたコード(シートオブジェクトやThisWorkbookに記載したコード)は扱い的にはclsファイルとなるため、インポートした時はクラスモジュールに分類されてインポートされます。
フォームはモジュールのファイルとfrxファイルの2つで1つの扱いになりますが、インポートの時はモジュールのファイルの方だけを引数に指定すればインポートが可能です。
サンプルコードでは、指定のモジュールだけをインポートする方法と、指定のブック内にあるすべてのモジュールをエクスポートする方法を記載しています。
※実行時に「プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」または「’VBE’メソッドは失敗しました’_application’オブジェクト」のエラーメッセージが表示された場合
動作確認
Windows10/Excel2016:○
Windows11/Excel2024:○
●指定したモジュールのインポート
'******************************************************************************
' モジュールの個別インポート
'******************************************************************************
Sub moduleImport_Single()
'インポート対象のモジュールファイルを指定
Dim sImporFile As String
sImporFile = "C:\VBA\module\モジュール_インポート.bas"
'指定のモジュールをインポート
ThisWorkbook.VBProject.VBComponents.Import sImporFile
End Sub
■実行前

■実行結果

●モジュールの一括インポート(フォルダ内のモジュールを一括でインポート)
'******************************************************************************
' モジュールファイルの一括インポート
'******************************************************************************
Sub moduleImport_All()
'インポートしたいファイルのあるフォルダを指定
Dim sImportPath As String
sImportPath = "C:\VBA\module\"
'FileSystemObjectの作成
Dim oFso As Object
Set oFso = CreateObject("Scripting.FileSystemObject")
'フォルダオブジェクトを取得
Dim oDir As Object
Set oDir = oFso.GetFolder(sImportPath)
'ファイル名を順次取得
Dim fFile As Object
For Each fFile In oDir.Files
'ファイルの拡張子を取得
Dim sExt As String
sExt = oFso.GetExtensionName(fFile.Name)
'拡張子からモジュールだけを取得、インポート
Select Case LCase(sExt)
Case "bas", "cls", "frm"
'指定のモジュールをインポート
ThisWorkbook.VBProject.VBComponents.Import sImportPath & fFile.Name
End Select
Next
MsgBox "完了"
End Sub■実行前

■実行結果



