VBAのモジュールをエクスポート

VBAのモジュールを個別もしくは一括でエクスポートする。

VBAでモジュール(標準モジュール・クラス・ユーザフォーム・ExcelObjects)を個別もしくは一括エクスポートするにはVBComponentsコレクションのExportメソッドを利用することでできます。

フォームのモジュールはエクスポート時に frx という拡張子のファイルが同時にエクスポートされます。フォームは出力指定したファイルとこのfrxファイルは2つで1つのモジュール扱いとなるので、インポートをする時はかならず2つのファイルが揃っている必要があります。

サンプルコードでは、指定のモジュールだけをエクスポートする方法と、指定のブックにあるすべてのモジュールを一括でエクスポートする方法を記載しています。
一括で出力する時には、出力先のフォルダにサブフォルダを作成してその中にエクスポートするようにしています。

※実行時に「プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」または「’VBE’メソッドは失敗しました’_application’オブジェクト」のエラーメッセージが表示された場合

動作確認
Windows10/Excel2016:○
Windows11/Excel2024:○

 ●指定したモジュールのエクスポート

'******************************************************************************
' モジュールの個別エクスポート
'******************************************************************************
Sub moduleExport_Single()
    
    'エクスポート対象のモジュールがあるオブジェクトを取得
    'このサンプルコードは自ブックを参照
    Dim wbObj As Workbook
    Set wbObj = ThisWorkbook
    
    '別ブックであれば下記のように記載
    'Dim sBookPath As String
    'sBookPath = "C:\VBA\VBAコード管理.xlsm"
    'Set wbObj = Workbooks.Open(fileName:=sBookPath, ReadOnly:=True, UpdateLinks:=0)
    
    
    '出力フォルダを指定
    Dim sExportDir As String
    sExportDir = "C:\VBA\module\"
    
    'VBComponentsコレクションを取得
    Dim VBComponents As Object
    Set VBComponents = wbObj.VBProject.VBComponents
    
    '指定のモジュールをエクスポート
    '※指定したモジュール名が存在しない場合はエラーになる
    VBComponents("VBA_MDL_EXPORT").Export sExportDir & "VBA_MDL_EXPORT.bas"

    Set VBComponents = Nothing
                                        
End Sub

 ■実行前

ブックにあるモジュール

 ■実行結果

 ●モジュールの一括エクスポート(指定したブックのすべてのモジュールを一括でエクスポート)

'******************************************************************************
' モジュールの一括エクスポート
'******************************************************************************
Sub moduleExport()

    'エクスポート対象のモジュールがあるファイルを指定
    Dim sBookPath As String
    sBookPath = "C:\VBA\VBAコード管理.xlsm"
    
    'エクスポート対象のモジュールがあるオブジェクトを取得
    Dim wbObj As Workbook
    '読み取り専用、リンクの更新のメッセージを非表示
    Set wbObj = Workbooks.Open(fileName:=sBookPath, ReadOnly:=True, UpdateLinks:=0)
    
    '出力フォルダを指定
    Dim sExportDir As String
    sExportDir = "C:\VBA\module\"
            '出力フォルダの末尾に\があるか確認、なければ付与
            If Right(sExportDir, 1) <> "\" Then: sExportDir = sExportDir & "\"
    
    
    'モジュールをエクスポート
    Call moduleExport_All(wbObj, sExportDir)

    MsgBox "完了"

End Sub

'******************************************************************************
' モジュールのエクスポート(全モジュール)
'------------------------------------------------------------------------------
'  第1引数:ブックオブジェクト
'  第2引数:出力フォルダのパス
'******************************************************************************
Sub moduleExport_All(getObjBook As Object, getExpPath As String)
    
    '出力フォルダに出力用のサブフォルダを作成
    Dim sExportSubDir As String
    sExportSubDir = getExpPath & "Excel_mdl_" & Format(Now(), "yyyymmdd_hhmmss") & "\"
    MkDir sExportSubDir
    
    'VBComponentsコレクションを取得
    Dim VBComponents As Object
    Set VBComponents = getObjBook.VBProject.VBComponents
    
    '全モジュールのエクスポート
    Dim i As Long
    For i = 1 To VBComponents.Count
        
        With VBComponents(VBComponents(i).Name)
            Dim sExt As String
            '種類ごとに拡張子を変更
            Select Case VBComponents(i).Type
            Case 1      '標準モジュール
                sExt = ".bas"
            Case 2, 100 'クラスモジュール、ExcelObjects
                sExt = ".cls"
            Case 3      'フォーム
            'フォームのエクスポート時はfrxファイルが同時にエクスポートされる
                sExt = ".frm"
            End Select
            
            'エクスポート
            .Export sExportSubDir & VBComponents(i).Name & sExt
            
        End With
        
    Next
    
    'Excelファイルを閉じる
    getObjBook.Close SaveChanges:=False
    
    Set VBComponents = Nothing
                                        
End Sub

 ■実行前

ブックにあるモジュール

 ■実行結果