当メモは2020-05-04に投稿されたものを加筆修正し、再掲したものです。
目次
はじめに
VBAプロジェクトのソースって、他のJavaやCなどのプログラミング言語と違って、ExcelやAccessでVisual Studio Editor(VBE)をわざわざ開かないと閲覧・編集できないし、バージョン管理もしづらいですよね。
そんなとき、ソースを右クリックし「ファイルのエクスポート」をすることができますが、これがファイル単位でしか行えないから非常に不便、みなさんそんな風に感じませんか?そこで、この記事では、そんな悩み多きVBAプロジェクトで、全ソースを一括でエクスポートする方法をご紹介します。
なお、この記事ではExcelを例にご紹介しています。Accessなどでも同様のことを行いたい場合は少しの修正で対応が可能になると思います。
想定読者
この記事はある程度VBAのスキルがある読者を想定しています。少なくてもVBAプロジェクトのソースをエクスポートして、ソース管理したいな・・・と思えるくらいの人を想定しています。
準備
まずはVBAプロジェクトの下準備が必要です。具体的には以下の参照設定にチェックが付けられているか確認して下さい。
- Microsoft Visual Basic for Applications Extensibility 5.3
- Microsoft Scripting Runtime
方法
- 1.まずVBEを開きます。(
Alt + F11
) - 2.標準モジュールで新規モジュールを作成します。例では
ExportModule
という名前で作成しました。(名前は任意)
ソースはこちら
Option Explicit Sub ExportMacroSource() ' [参照設定] Microsoft Visual Basic for Applications Extensibility 必要 ' [参照設定] Microsoft Scripting Rungime 必要 Dim p_fso As Scripting.FileSystemObject Set p_fso = New Scripting.FileSystemObject Dim p_macroDir As String p_macroDir = p_fso.BuildPath(Application.ActiveWorkbook.Path, "MacroSource") If Not p_fso.FolderExists(p_macroDir) Then p_fso.CreateFolder p_macroDir End If Dim p_vbComp As VBIDE.VBComponent Dim p_typeLabel As String Dim p_extension As String Dim p_outputFileName As String For Each p_vbComp In Application.VBE.ActiveVBProject.VBComponents ' タイプから拡張子を特定 Select Case p_vbComp.Type Case vbext_ct_ActiveXDesigner p_typeLabel = "ActiveXDesigner" p_extension = "cls" Case vbext_ct_ClassModule p_typeLabel = "ClassModule" p_extension = "cls" Case vbext_ct_Document p_typeLabel = "Document" p_extension = "cls" Case vbext_ct_MSForm p_typeLabel = "MSForm" p_extension = "frm" Case vbext_ct_StdModule p_typeLabel = "StdModule" p_extension = "bas" End Select ' エクスポート実施 p_outputFileName = p_fso.BuildPath(p_macroDir, p_vbComp.Name & "." & p_extension) Debug.Print "[export] " & p_outputFileName p_vbComp.Export Filename:=p_outputFileName Next p_vbComp Debug.Print "Finish export." End Sub
- 3.
ExportModule
を開いているエディタ上で、F5
をクリック (実行)します。 - 4.イミディエイトウィンドウにも出力結果が出力されます。
- 5.Excelファイルが置いてあるパスと同じパスに「MacroSource」というフォルダが作成されVBAプロジェクトの全ソースが一括エクスポートされます。
注意として、2回出力するとソースは上書きされますのでご注意下さい。 あとは、お好きなソース管理システムにコミットして下さい。
信頼性に欠けるというエラーが出た場合は?
実行時に「信頼性に欠ける」というエラーが出た場合、「開発者向けのマクロ設定」の「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」のチェックボックスにチェックを付けてから実行してみて下さい。
まとめ
ここではVBAプロジェクトで、全ソースを一括でエクスポートする方法をご紹介しました。 アドインにするなどすればもっと便利にできると思いますが、サクっと一括エクスポートできる環境を整えたい場合には、ぜひ今回ご紹介した方法を利用してみて下さいね!