VBAから
・Exceファイル(xlsm)の
・標準モジュールをエクスポート
できます!
準備
VBAを使用して標準モジュールをエクスポートするには
・「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェック
を入れておく必要があります。
以下の手順で設定画面を表示できます。
①[ファイル]→[その他]→[オプション]をクリックする。
②[トラスト センター]の「トラスト センターの設定」をクリックする。
③[マクロの設定]をクリックする。
④「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れて「OK」をクリック
⑤「OK」をクリック
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
実行結果
Exceファイル(xlsm)の標準モジュールをエクスポートできました。
参考①
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●「Workbookオブジェクト」の「VBProject」プロパティ
●「VBProjectオブジェクト」の「VBComponents」
●「VBComponentオブジェクト」の「Export」メソッド
参考②
本記事と以下の記事の内容を組み合わせることで
・指定フォルダ配下(サブフォルダ含む)の
・全てのExceファイルの
・標準モジュールをエクスポート
できます。