はじめに
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 | 同上 |
フォーム・レポート | .txt | Application.SaveAsText で出力、再読み込み可能(LoadFromText) |
差分管理の活用法(Git / WinMerge)
- 毎回
ExportAllObjects
を実行し、タイムスタンプ付きでバックアップ - 差分ツール(WinMergeやVS CodeのDiff)で前回と比較
- 差分が明確になり、「いつ何を変えたか」が分かる
- Gitで
.bas/.cls/.txt
をバージョン管理すれば、チーム開発や復元も可能
よくある注意点
- フォームやレポートのUI設計部分はバイナリ情報も含まれるため、すべては再現できない可能性あり(ただし、設計+コードの主要部分は
.txt
に含まれます) - モジュール名が重複していないかを確認(上書き注意)
まとめ
- Access VBAでは一括エクスポート機能がないため、VBAで自動化が必須
.bas/.cls/.txt
形式にすれば、Gitや差分比較ツールとの相性も抜群- 修正前後の差分がわかることで、品質向上・レビュー・バグ特定にも役立つ
関連キーワード
- フォームやレポートのUI設計部分はバイナリ情報も含まれるため、すべては再現できない可能性あり(ただし、設計+コードの主要部分は
.txt
に含まれます) - モジュール名が重複していないかを確認(上書き注意)