VBAにてVBAにモジュールをインポートする方法を紹介します。インポート作業のツール化が可能になるでしょう。
① Visual Baisc プロジェクトへのアクセスを許可します。
② 「Microsoft Visual Basic for Application Extensibility」を参照設定します。
③ 次のプログラムコードを記載します。
Public Sub Sample_ImportModule_01()
' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
' 参照設定:
' 「Microsoft Visual Basic for Application Extensibility」
' ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
' このブックのVBProjectをオブジェクト変数に格納する。
Dim Obj As VBIDE.VBProject
Set Obj = ThisWorkbook.VBProject
' インポートしたいファイル名を決める。
Dim ImpFile As String
ImpFile = "C:\汎用モジュール\FileIOModule.bas"
' ブック内にモジュールがあるか判別する。
If exists_ImpFile(ImpFile) Then
MsgBox "既に同一モジュールが存在します。", vbExclamation
Else
' このブックにVBAモジュールをインポートします。
Obj.VBComponents.Import ImpFile
End If
' オブジェクトを破棄する。
Set Obj = Nothing
End Sub
' *
' * ブック内にモジュールがあるか判別する関数
' *
Public Function exists_ImpFile( _
pImpFile As String _
) As Boolean
' 戻り値をFalseで初期化する。
exists_ImpFile = False
' FileSystemObjectを生成する。
Dim F As Object
Set F = CreateObject("Scripting.FileSystemObject")
' ファイルのベース名を切り出す。
Dim fileName As String
fileName = F.GetBaseName(pImpFile)
' このブックのVBProjectをオブジェクト変数に格納する。
Dim Obj As VBIDE.VBProject
Set Obj = ThisWorkbook.VBProject
' VBProjectに存在するコンポーネント数を変数に格納する。
Dim CompCnt As Long
CompCnt = Obj.VBComponents.Count
' VBProjectに存在するコンポーネントを一つずつ参照する。
Dim lp As Long
For lp = 1 To CompCnt
' モジュールが既に存在していないか判別する。
If Obj.VBComponents(lp).Name = fileName Then
' 戻り値をTrueにする。
exists_ImpFile = True
GoTo END_JUDGE
End If
Next
END_JUDGE:
' オブジェクトを破棄する。
Set Obj = Nothing
End Function
このVBAを実行すると、以下の結果が得られます。
コメントを残す