【VBA活用】モジュール・フォーム・レポートを一括エクスポート!変更差分の管理にも便利

Access VBA

はじめに

Access VBAで開発をしていると、こんな悩みはありませんか?

  • モジュールの修正履歴を残したいが、VBA標準では一括エクスポート機能がない
  • 修正前後の差分を比較(差分チェック)したいが、手作業では非効率
  • Gitなどでバージョン管理したいが、.accdbファイルはバイナリなので難しい

この記事では、Accessの標準モジュール・クラスモジュール・フォーム・レポートのコードを一括エクスポートしてフォルダに保存するVBAコードとその活用法を紹介します。


この記事でできること

  • Accessのモジュール、フォーム、レポートを**.bas / .cls / .frm / .txt** 形式でエクスポート
  • 差分比較ツール(例:WinMerge、Beyond Compare)やGitによるバージョン管理に対応
  • 特定フォルダに日付別で保存することで履歴として残せる

事前準備

  • Trust Center で「VBAプロジェクトオブジェクトモデルへのアクセスを許可する」を有効化(セキュリティ設定)
  • 保存先フォルダを事前に作成しておく(例: C:\VBA_ExportBackup\

VBAコード:すべてのモジュール・フォーム・レポートを一括エクスポート


    ' 参照設定: Microsoft Access XX.X Object Library が必要
    Dim accApp As Access.Applicatio
    Dim vbComp As Object
    Dim exportFolder As String
    Dim accdbPath As String
    Dim ext As String
    Dim outFile As String
    Dim ff As Integer
    
    If MsgBox("本当に実行しますか?", vbYesNo + vbQuestion, "確認") = vbNo Then
        Exit Sub
    End If

    accdbPath = "C:\Users\test.accdb" ' Accessファイルのパス
    exportFolder = "C:\Users\" ' 出力先フォルダ

    ' フォルダがなければ作成
    If Dir(exportFolder, vbDirectory) = "" Then MkDir exportFolder

    Set accApp = CreateObject("Access.Application")
    accApp.OpenCurrentDatabase accdbPath

    For Each vbComp In accApp.VBE.ActiveVBProject.VBComponents
        Select Case vbComp.Type
            Case 1: ext = ".bas"  ' 標準モジュール
            Case 2: ext = ".cls"  ' クラスモジュール
            Case 3: ext = ".frm"  ' フォーム
            Case Else: ext = ".txt"
        End Select
        outFile = exportFolder & vbComp.Name & ext
        vbComp.Export outFile
    Next

    accApp.Quit
    Set accApp = Nothing

    MsgBox "エクスポートできたよ!"
End Sub

補足:出力形式について

オブジェクト拡張子用途
標準モジュール.bas差分管理・再インポート可能
クラスモジュール.cls同上
フォーム・レポート.txtApplication.SaveAsText で出力、再読み込み可能(LoadFromText)

差分管理の活用法(Git / WinMerge)

  1. 毎回 ExportAllObjects を実行し、タイムスタンプ付きでバックアップ
  2. 差分ツール(WinMergeやVS CodeのDiff)で前回と比較
  3. 差分が明確になり、「いつ何を変えたか」が分かる
  4. Gitで .bas/.cls/.txt をバージョン管理すれば、チーム開発や復元も可能

よくある注意点

  • フォームやレポートのUI設計部分はバイナリ情報も含まれるため、すべては再現できない可能性あり(ただし、設計+コードの主要部分は .txt に含まれます)
  • モジュール名が重複していないかを確認(上書き注意)

まとめ

  • Access VBAでは一括エクスポート機能がないため、VBAで自動化が必須
  • .bas/.cls/.txt 形式にすれば、Gitや差分比較ツールとの相性も抜群
  • 修正前後の差分がわかることで、品質向上・レビュー・バグ特定にも役立つ

関連キーワード

  • フォームやレポートのUI設計部分はバイナリ情報も含まれるため、すべては再現できない可能性あり(ただし、設計+コードの主要部分は .txt に含まれます)
  • モジュール名が重複していないかを確認(上書き注意)

他の記事

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