概要
本記事では、Excel VBAで作成したソースコード出力モジュールについて解説します。
このモジュールは、ExcelのVBAプロジェクト内のモジュール、クラス、フォーム、ドキュメントを指定したフォルダにテキストファイルとしてエクスポートする機能を提供します。
モジュールの機能
- エクスポート対象
標準モジュール、クラスモジュール、フォーム、ドキュメント - エクスポート先
アクティブなワークブックと同じフォルダ内の”Export”フォルダ(存在しない場合は作成) - ファイル形式
それぞれのオブジェクトに対応した拡張子(.bas, .cls, .frm, .vbd)で保存 - 一括処理
ブック内のすべての対象オブジェクトを一度にエクスポート 
標準モジュールのコード
Option Explicit
Const DIR_NAME_EXPORT = "Export"
Const EXT_TYPE_MODULE = 1
Const EXT_TYPE_CLASS = 2
Const EXT_TYPE_FORM = 3
Const EXT_TYPE_DOCUMENT = 100
Const EXT_MODULE = ".bas"
Const EXT_CLASS = ".cls"
Const EXT_FORM = ".frm"
Const EXT_DOCUMENT = ".vbd"
' ------------------------------------------------------------
' Excel VBAのソースコードを出力
' ------------------------------------------------------------
Sub ExportSourceCode()
    Dim module As Variant
    Dim ext As String
    Dim filePath As String
    
    ' 出力先フォルダ
    filePath = ActiveWorkbook.Path & "\" & DIR_NAME_EXPORT
    ' ディレクトリー作成
    If Dir(filePath, vbDirectory) = "" Then
        MkDir filePath
    End If
    For Each module In ActiveWorkbook.VBProject.VBComponents
        Select Case module.Type
            ' 標準モジュール
            Case EXT_TYPE_MODULE
                ext = EXT_MODULE
            ' クラス
            Case EXT_TYPE_CLASS
                ext = EXT_CLASS
            ' フォーム
            Case EXT_TYPE_FORM
                ext = EXT_TYPE_FORM
            ' ドキュメント
            Case EXT_TYPE_DOCUMENT
                ext = EXT_DOCUMENT
            ' その他
            Case Else
                GoTo CONTINUE
        End Select
        
        ' エクスポート実行
        Call module.Export(filePath & "\" & module.name & ext)
CONTINUE:
    Next
    MsgBox "エクスポート完了"
End Subコード解説
定数
Const DIR_NAME_EXPORT = "Export"
Const EXT_TYPE_MODULE = 1
Const EXT_TYPE_CLASS = 2
Const EXT_TYPE_FORM = 3
Const EXT_TYPE_DOCUMENT = 100
Const EXT_MODULE = ".bas"
Const EXT_CLASS = ".cls"
Const EXT_FORM = ".frm"
Const EXT_DOCUMENT = ".vbd"- DIR_NAME_EXPORT: エクスポート先のフォルダ名
 - EXT_TYPE_MODULE, EXT_TYPE_CLASS, …: オブジェクトの種類を表す定数
 - EXT_MODULE, EXT_CLASS, …: オブジェクトに対応する拡張子
 
出力先フォルダ
    ' 出力先フォルダ
    filePath = ActiveWorkbook.Path & "\" & DIR_NAME_EXPORT
    ' ディレクトリー作成
    If Dir(filePath, vbDirectory) = "" Then
        MkDir filePath
    End If- カレントディレクトリの取得: ActiveWorkbook.Pathでアクティブなワークブックのパスを取得
 - エクスポートフォルダの作成: Dir関数でフォルダの存在を確認し、存在しない場合はMkDirで作成
 
ソースコードの出力
    For Each module In ActiveWorkbook.VBProject.VBComponents
        ' 各モジュールに対する処理
    Next- ブックのモジュール一覧の取得: ActiveWorkbook.VBProject.VBComponentsでモジュール一覧を取得
 - ループ処理: 取得したモジュール一覧をループで処理する
 
各モジュールの処理
        Select Case module.Type
            ' 標準モジュール
            Case EXT_TYPE_MODULE
                ext = EXT_MODULE
            ' クラス
            Case EXT_TYPE_CLASS
                ext = EXT_CLASS
            ' フォーム
            Case EXT_TYPE_FORM
                ext = EXT_TYPE_FORM
            ' ドキュメント
            Case EXT_TYPE_DOCUMENT
                ext = EXT_DOCUMENT
            ' その他
            Case Else
                GoTo CONTINUE
        End Select
        
        ' エクスポート実行
        Call module.Export(filePath & "\" & module.name & ext)- オブジェクトの種類ごとの処理: Select Case文でオブジェクトの種類を判別し、対応する拡張子を設定
 - エクスポート実行: module.Exportメソッドでオブジェクトを指定したフォルダに出力
 
使い方
- このモジュールをExcelのVBAプロジェクトに追加します。
 ExportSourceCodeサブプロシージャを実行します。- アクティブなワークブックと同じフォルダ内に”Export”フォルダが作成され、その中に各オブジェクトのソースコードが保存されます。
 
注意点
- オーバーライト
既存のファイルがある場合は上書きされます。 - パスワード保護
パスワードで保護されたオブジェクトはエクスポートできません。 - 大型プロジェクト
大量のオブジェクトをエクスポートする場合、処理時間がかかることがあります。 
機能拡張のアイデア
- 選択的なエクスポート
特定のオブジェクトのみをエクスポートできるようにする。 - 保存先の指定
エクスポート先のフォルダを自由に指定できるようにする。 - ファイル名のカスタマイズ
ファイル名に日付や時刻などを付加できるようにする。 - エラー処理
エラーが発生した場合に適切なメッセージを表示する。 - ログ出力
エクスポート処理の状況をログファイルに出力する。 
まとめ
このVBAソースコード出力モジュールは、VBAプロジェクトの管理やバックアップに役立ちます。また、他のプロジェクトで再利用可能なコードを抽出したり、コードレビューを行う際にも便利です。
補足
- このモジュールは、VBAプロジェクト内のオブジェクトをテキスト形式でエクスポートするものであり、コンパイルされた実行ファイルを作成するものではありません。
 - VBAプロジェクトの構造によっては、正しくエクスポートできない場合があります。
 - エクスポートしたファイルは、テキストエディタで編集できますが、直接実行することはできません。
 
  
  
  
  
コメント