【VBA】標準モジュールをエクスポートする

VBAから
 ・Exceファイル(xlsm)の
 ・標準モジュールをエクスポート
できます!

標準モジュール
PR

準備

VBAを使用して標準モジュールをエクスポートするには
 ・「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェック
を入れておく必要があります。

「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェック
「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェック


以下の手順で設定画面を表示できます。

①[ファイル]→[その他]→[オプション]をクリックする。
②[トラスト センター]の「トラスト センターの設定」をクリックする。
③[マクロの設定]をクリックする。
④「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れて「OK」をクリック
⑤「OK」をクリック

PR

VBAコード

ここでは例として、
 ・デスクトップ配下のExceファイル「sampleMacro.xlsm」の標準モジュールを
 ・デスクトップ配下のフォルダ「output」へエクスポート
します。

エクスポートするファイル名は
 ・Exceファイル名_モジュール名.bas
とします。

Option Explicit

Sub sample()
    
    Dim exceMacrolFilePath As String
    Dim outputFolder As String
    Dim wk As Workbook
    Dim VBComponents As Object
    Dim i As Integer
    Dim fso As Object
    
    'Excelファイルを指定
    exceMacrolFilePath = "C:\Users\user\Desktop\sampleMacro.xlsm"
    
    '出力フォルダを指定
    outputFolder = "C:\Users\user\Desktop\output"
    
    'Excelファイルを開く
    '・「リンクの更新する/しない」のメッセージを非表示
    '・「読み取り専用を推奨する/しない」のメッセージを非表示
    '・読み取り専用で開く
    Set wk = Workbooks.Open(fileName:=exceMacrolFilePath, UpdateLinks:=0, IgnoreReadOnlyRecommended:=True, ReadOnly:=True)
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'VBComponentsコレクションを取得
    Set VBComponents = wk.VBProject.VBComponents
    
    'VBComponentsコレクションの数だけ繰り返し
    For i = 1 To VBComponents.Count
    
        '標準モジュールのみを対象 ※クラスモジュール等は対象外にする
        If VBComponents(i).Type = 1 Then
            'モジュールを出力
            VBComponents(VBComponents(i).Name).Export _
                                               outputFolder & _
                                               "\" & _
                                               fso.GetBaseName(exceMacrolFilePath) & _
                                               "_" & _
                                               VBComponents(i).Name & _
                                               ".bas"
        End If
    Next
    
    'Excelファイルを保存せずに閉じる
    wk.Close SaveChanges:=False

    '後片付け
    Set VBComponents = Nothing
    Set fso = Nothing
                                        
End Sub

「Workbookオブジェクト」の「VBProject」プロパティにより、「VBProjectオブジェクト」を取得します(27行目)。

「VBProjectオブジェクト」の「VBComponents」により、「VBComponentsコレクション」を取得します(27行目)。

「VBComponentsコレクション」の数だけ繰り返し処理をします(30行目)。

標準モジュールかどうかを判定します (33行目)。
※「Type」 について
 1 : 標準モジュール
 2 : クラスモジュール
 3 : ユーザーフォーム
 100 : Excelオブジェクト(ワークブック、シート)

「VBComponentオブジェクト」の「Export」メソッドにより、エクスポートします(35行目)。

PR

実行結果

Exceファイル(xlsm)の標準モジュールをエクスポートできました。

Exceファイル(xlsm)に存在する標準モジュール
Exceファイル(xlsm)に存在する標準モジュール
エクスポートされた標準モジュール
エクスポートされた標準モジュール
PR

参考①

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「Workbookオブジェクト」の「VBProject」プロパティ


●「VBProjectオブジェクト」の「VBComponents」


●「VBComponentオブジェクト」の「Export」メソッド

PR

参考②

本記事と以下の記事の内容を組み合わせることで
 ・指定フォルダ配下(サブフォルダ含む)の
 ・全てのExceファイルの
 ・標準モジュールをエクスポート
できます。