Microsoft Excel VBAのソースコードをエクスポートするプログラム

VBA プログラミング
この記事は約5分で読めます。

※当ブログではアフィリエイト広告を利用しています。

Microsoft ExcelのVisual Basic Editorでは、VBAのソースをGrep検索などが出来ないので不便。

数個のプログラムならそれぞれを検索すればいいのだが、標準モジュール、クラスモジュール、ユーザーフォームなど大量のプログラムに分かれている場合は大変。

かといって、一つ一つのプログラムをエクスポートしてファイルに出力するのも大変。

なので、ソースコードをエクスポートするプログラムを作成してみた。

これを実行してやれば、Excelブックのディレクトリに「export_YYYYMMDDhhmm」を作成し、その中に各ソースをエクスポートしてくれる。

'列挙型変数定義
Public Enum ComponentType
    STANDARD_MODULE = 1  '標準モジュール
    CLASS_MODULE = 2     'クラスモジュール
    USER_FORM = 3        'ユーザーフォーム
    EXCEL_OBJECTS = 100  'Excelオブジェクト(ワークブック・シート)
End Enum

'VBAソースコードエクスポート関数
Private Sub ExportVBAFiles()

    '変数定義
    Dim TempComponent As Object
    Dim ExportPath As String

    'エクスポート先ディレクトリの取得
    ExportPath = ThisWorkbook.Path & "\export_" & Format(Now, "YYYYMMDDhhmm")

    'エクスポート先ディレクトリがない場合、ディレクトリ作成
    If Dir(ExportPath) = "" Then
        Call MkDir(ExportPath)
    End If

    'エクスポート先ディレクトリに「BAS」ディレクトリがない場合、ディレクトリ作成
    If Dir(ExportPath & "\BAS") = "" Then
        Call MkDir(ExportPath & "\BAS")
    End If

    'エクスポート先ディレクトリに「CLS」ディレクトリがない場合、ディレクトリ作成
    If Dir(ExportPath & "\CLS") = "" Then
        Call MkDir(ExportPath & "\CLS")
    End If

    'エクスポート先ディレクトリに「FRM」ディレクトリがない場合、ディレクトリ作成
    If Dir(ExportPath & "\FRM") = "" Then
        Call MkDir(ExportPath & "\FRM")
    End If

    'プロジェクトのソースコードをループ
    For Each TempComponent In ThisWorkbook.VBProject.VBComponents
        'タイプ別判定
        Select Case TempComponent.Type
            '標準モジュールの場合、「BAS」ディレクトリへ出力
            Case STANDARD_MODULE
                TempComponent.Export ExportPath & "\BAS\" & TempComponent.Name & ".bas"

            'クラスモジュールの場合、「CLS」ディレクトリへ出力
            Case CLASS_MODULE
                TempComponent.Export ExportPath & "\CLS\" & TempComponent.Name & ".cls"

            'ユーザーフォームの場合、「FRM」ディレクトリへ出力
            Case USER_FORM
                TempComponent.Export ExportPath & "\FRM\" & TempComponent.Name & ".frm"

            'Excelオブジェクト(ワークブック・シート)の場合、「CLS」ディレクトリへ出力
            Case EXCEL_OBJECTS
                TempComponent.Export ExportPath & "\CLS\" & TempComponent.Name & ".cls"
        End Select
    Next

    MsgBox "ソースエクスポート完了。"
End Sub

参考サイト

vba – Excel tab sheet names vs. Visual Basic sheet names – Stack Overflow

VBA for smarties Adapt VBA in a workbook using VBA

コメント

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