ExcelのVBAのモジュールをエクスポートするにはVisual Basic エディタを開き、該当のモジュールを選択して右クリックし、エクスポートを選択します。
これは面倒だということで自動化するマクロが紹介されていました。ありがとうございます。
Excel VBAでモジュールをエクスポートするコード – paz3のおもいつき
これをお借りして、フォルダ内にあるExcelファイルをすべて開き、VBAモジュールをエクスポートする方法を考えてみました。
Excel2007で確認しました。
基本部分
次のコードを使用します。
ほとんどすべて元のコードのままです。
3個目の「ExportModuleWithExt」の一部を書き換えました。
元のコードではファイル名は「モジュール名+拡張子」なのですが、複数のファイルをエクスポートするとダブル可能性があるのでファイル名を付加しています。
'現在のワークブックのモジュールをエクスポートする
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
応用部分
複数のファイルに対して実行するための部分です。
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が開かれてモジュールが同じフォルダにエクスポートされます。
コメント