■ 最新の投稿

VBAProject技:VBAを使って、ExcelブックへVBAをインポートする

モジュールをインポートすれば、既存のVBA資産をすぐに再利用できます。

VBAにてVBAにモジュールをインポートする方法を紹介します。インポート作業のツール化が可能になるでしょう。

① Visual Baisc プロジェクトへのアクセスを許可します。

Excel VBAで『Visual Basicプロジェクトへのアクセス』を有効にする方法

② 「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

コードは一度作ったら終わりではありません。再利用してこそ資産になります。


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です