フォルダ内のExcelファイルのモジュールをすべてエクスポート

ExcelのVBAのモジュールをエクスポートするにはVisual Basic エディタを開き、該当のモジュールを選択して右クリックし、エクスポートを選択します。
これは面倒だということで自動化するマクロが紹介されていました。ありがとうございます。

Excel VBAでモジュールをエクスポートするコード – paz3のおもいつき

これをお借りして、フォルダ内にあるExcelファイルをすべて開き、VBAモジュールをエクスポートする方法を考えてみました。
Excel2007で確認しました。

基本部分

次のコードを使用します。
ほとんどすべて元のコードのままです。
3個目の「ExportModuleWithExt」の一部を書き換えました。
元のコードではファイル名は「モジュール名+拡張子」なのですが、複数のファイルをエクスポートするとダブル可能性があるのでファイル名を付加しています。

Public Sub ExportModules()
    '現在のワークブックのモジュールをエクスポートする
    Dim targetModule As VBComponent
    Dim outputPath As String
    Dim fileExt As String
    outputPath = ActiveWorkbook.Path
    For Each targetModule In ActiveWorkbook.VBProject.VBComponents
        fileExt = GetExtFromModuleType(targetModule.Type)
        If fileExt <> "" Then
            ExportModuleWithExt targetModule, outputPath, fileExt
            Debug.Print "Save " & targetModule.Name
        End If
    Next
End Sub

Private Function GetExtFromModuleType(aType As Integer) As String
    '指定されたモジュール・タイプに対応する拡張子を返す
    Select Case aType
    Case vbext_ct_StdModule
        GetExtFromModuleType = "bas"
    Case vbext_ct_ClassModule, vbext_ct_Document
        GetExtFromModuleType = "cls"
    Case vbext_ct_MSForm
        GetExtFromModuleType = "frm"
    End Select
End Function

Private Sub ExportModuleWithExt(aModule As VBComponent, Path As String, Ext As String)
    '指定されたモジュールをエクスポートする
    Dim filePath As String
    Dim fileName As String
    'filePath = Path & "" & aModule.Name & "." & Ext
    fileName = ActiveWorkbook.Name
    filePath = Path & "" & fileName & "-" & aModule.Name & "." & Ext
    aModule.Export filePath
End Sub

応用部分

複数のファイルに対して実行するための部分です。

Sub フォルダ内モジュール一括エクスポート()
    thisfn = ActiveWorkbook.Name
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "フォルダを選択"
        .AllowMultiSelect = False
        If .Show = -1 Then
            targetdir = .SelectedItems(1)
        Else
            Exit Sub
        End If
    End With
    targetfn = Dir(targetdir & "", vbNormal)
    Do Until targetfn = ""
        If thisfn <> targetfn Then
            Call モジュールをエクスポート(thisfn, targetfn)
        End If
        targetfn = Dir
    Loop
    MsgBox "処理が終わりました。"
End Sub

Sub モジュールをエクスポート(thisfilename, targetfilename)
    Workbooks.Open fileName:=targetfilename
    Application.Run thisfilename & "!ExportModules"
    ActiveWorkbook.Close
End Sub

準備

適当なExcelファイルを新規作成します。
Visual Basic エディタを開き、上のコードをすべて貼り付けます。
ツール-参照設定を選択し、「Microsoft Visual Basic for Application Extensibility 5.3」にチェックを入れます。
Excelに戻り、Officeボタン-Excelのオプション-セキュリティセンター-セキュリティセンターの設定ボタンをクリックします。
マクロの設定を選択し、VBAプロジェクトオブジェクトモデルへのアクセスを信頼するにチェックを入れます。

使い方

モジュールをエクスポートしたいExcelファイルを一つのフォルダにコピーして集めます。
先ほど準備したExcelファイルに戻り、表示-マクロ-マクロの表示を選択します。
「フォルダ内モジュール一括エクスポート」を選択し実行します。
先ほど準備したフォルダを選択します。
次々にExcelが開かれてモジュールが同じフォルダにエクスポートされます。

コメント

タイトルとURLをコピーしました