【入門編】Application.VBEオブジェクトを用いたモジュール内のプロシージャ名一括取得とドキュメント化 – Access VBA解析バイブル

スポンサーリンク

Access VBAの深淵へ:VBEオブジェクトで「コードそのもの」を解析・ドキュメント化する

Accessを使いこなす中で、「このデータベース、結局どれだけの機能(プロシージャ)があるんだっけ?」と迷子になったことはありませんか?

多くの人が「マクロの記録」や「ネットのコードのコピペ」から出発します。しかし、そこから脱却し、真のエンジニアへと進むための鍵は「VBAでVBAを操る」という視点を持つことです。

今回は、Accessの心臓部である`VBE(Visual Basic Editor)`オブジェクトを操作し、プロジェクト内の全プロシージャ名と引数を自動でリストアップする「自己解析ツール」の作り方を伝授します。

1. 準備:魔法の鍵「参照設定」を解放せよ

Access VBAでVBEを操作するには、標準では隠されている「扉」を開く必要があります。

1. VBA画面を開く(`Alt + F11`)
2. メニューの「ツール」→「参照設定」をクリック
3. リストの中から「Microsoft Visual Basic for Applications Extensibility 5.3」を探してチェックを入れる

これこそが、VBAからVBEそのものを制御するためのライセンスです。ここをクリアすれば、あなたはもう「コードを書く人」から「コードを管理する人」への第一歩を踏み出したことになります。

2. なぜVBEオブジェクトを使うのか?

通常、Access VBAは「データ(テーブル)」や「画面(フォーム)」を操作します。しかし、`Application.VBE`を使えば、「コードそのものをデータとして扱う」ことができます。

  • プロジェクト(VBProject): あなたのAccessファイル全体
  • コンポーネント(VBComponent): 各モジュールやフォーム
  • コードモジュール(CodeModule): プロシージャが書かれているテキスト

これらを階層的に辿ることで、私たちは「コードの目次」を自動生成できるのです。

3. 実践:プロシージャ抽出ツール

以下のコードを標準モジュールに貼り付けてみてください。このコードは、現在のプロジェクト内の全モジュールを走査し、プロシージャ名をExcelに出力するための基礎となります。

Option Explicit

‘ 伝説のエンジニアへの第一歩:VBEを解析するプロシージャ
Public Sub ExportProcedureList()
Dim vbeProj As VBProject
Dim vbeComp As VBComponent
Dim vbeMod As CodeModule
Dim procName As String
Dim i As Long

‘ 現在のプロジェクトを取得
Set vbeProj = Application.VBE.ActiveVBProject

‘ 各モジュールを巡回
For Each vbeComp In vbeProj.VBComponents
Set vbeMod = vbeComp.CodeModule

‘ モジュール内のプロシージャをループ
i = vbeMod.CountOfDeclarationLines + 1
Do While i <= vbeMod.CountOfLines procName = vbeMod.ProcOfLine(i, vbext_pk_Proc) ' プロシージャ名が空でなければ出力 If procName <> “” Then
Debug.Print “モジュール: ” & vbeComp.Name & ” | プロシージャ: ” & procName
‘ ここにExcelへの書き出し処理を追加すると完璧です

‘ 次のプロシージャへジャンプ(ProcBodyLineでスキップする工夫が必要)
i = vbeMod.ProcBodyLine(procName, vbext_pk_Proc) + vbeMod.ProcCountLines(procName, vbext_pk_Proc)
Else
i = i + 1
End If
Loop
Next vbeComp

MsgBox “解析完了!イミディエイトウィンドウを確認してください。”, vbInformation
End Sub

4. ここで陥りやすい「落とし穴」

初心者がよく詰まるポイントを先回りして解説します。

  • 「アクセスが拒否されました」エラー:

Accessの設定で「VBAプロジェクトへのプログラムによるアクセスを信頼する」にチェックが入っていない可能性があります。「ファイル」→「オプション」→「セキュリティセンター」の設定を確認してください。

  • プロシージャ名が重複する?:

`ProcOfLine`メソッドは、その行がどのプロシージャに属しているかを返します。ループの最後で「そのプロシージャの行数分だけスキップする」ロジック(上記の`i = … + …`の部分)を入れないと、同じ名前が延々と出力されます。ここがアルゴリズムの肝です。

5. 最後に:エンジニアとしての視点

このツールは単なる便利ツールではありません。「自分の書いたコードを客観的に俯瞰する」ための窓口です。

プロシージャ名が長すぎる、あるいは一つのモジュールにプロシージャが詰め込まれすぎている……。そんな「設計の歪み」を自動化ツールで可視化することで、あなたのコードはより美しく、メンテナンス性の高いものへと進化します。

ここをクリアすれば、Access VBAの基本はバッチリです。次はぜひ、このリストをExcelのテーブルに書き出し、ドキュメントとして自動保存する機能に挑戦してみてください。

あなたの開発現場が、より合理的でワクワクするものになりますように。応援しています!

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