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

スポンサーリンク

Accessの「神」にアクセスする:VBEオブジェクトでコードを自動解析する方法

Access VBAの世界へようこそ。フォームにボタンを置いてマクロを動かす、そんな「表側の開発」を卒業しようとしているあなたへ。今日は、Accessの心臓部であるVBE(Visual Basic Editor)そのものをプログラムから操作するという、少し刺激的な領域へご案内します。

「自分の書いたコードがどこに何個あるのか分からない」
「仕様書を作るために、プロシージャ名を1つずつ手書きで書き写している」

そんな非効率な作業は、今日で終わりにしましょう。VBEオブジェクトモデルを使いこなせば、「自分のコードを、自分自身でドキュメント化する」という、エンジニア冥利に尽きる自動化が実現できます。

1. VBEオブジェクトモデルという「裏口」

通常、私たちは「テーブル」や「フォーム」といったAccessのオブジェクトを操作します。しかし、VBEオブジェクトモデルを使えば、VBAのコードそのものを「データ」として扱うことが可能になります。

これを実現するには、まずAccessの「参照設定」で特別な鍵を開ける必要があります。

準備:参照設定の追加

1. VBE画面(Alt + F11)を開く
2. メニューバーの [ツール] > [参照設定] をクリック
3. リストから 「Microsoft Visual Basic for Applications Extensibility 5.3」 を探し、チェックを入れてOKを押す

これがないと、VBEの内部構造にアクセスするための「チケット」を持っていない状態になります。

2. 全プロシージャ名を取得する実装コード

では、実際にデータベース内の全モジュールを巡回し、プロシージャ名をExcelやテーブルに出力するためのエンジンを書きましょう。

Option Explicit

‘ 伝説のアーキテクトが教える、VBE解析の基本エンジン
Public Sub ExportProcedureList()
Dim vbProj As VBIDE.VBProject
Dim vbComp As VBIDE.VBComponent
Dim codeMod As VBIDE.CodeModule
Dim i As Long, procName As String

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

Debug.Print “— 解析開始 —”

‘ 全てのコンポーネント(標準モジュール、フォーム、クラス等)をループ
For Each vbComp In vbProj.VBComponents
Set codeMod = vbComp.CodeModule

‘ モジュール内にプロシージャがあるかチェック
i = codeMod.CountOfDeclarationLines + 1
Do While i <= codeMod.CountOfLines ' プロシージャ名を取得 procName = codeMod.ProcOfLine(i, vbext_pk_Proc) ' 同じプロシージャ名が連続するため、重複を除いて出力 If procName <> “” Then
Debug.Print “モジュール: ” & vbComp.Name & ” | プロシージャ: ” & procName
‘ 次のプロシージャまでインデックスを飛ばす
i = i + codeMod.ProcCountLines(procName, vbext_pk_Proc)
Else
i = i + 1
End If
Loop
Next vbComp

Debug.Print “— 解析終了 —”
End Sub

3. このコードが「何をしているか」の解剖図

初心者がここで躓きやすいポイントを、あえて解説します。

  • `vbext_pk_Proc` とは?: これは「プロシージャの種類」を示す定数です。VBAには単なる宣言行と、SubやFunctionのプロシージャがありますが、この定数を使うことで「コードの塊」だけを正確に抽出できます。
  • `CountOfDeclarationLines`: モジュールの冒頭にある `Option Explicit` や変数の宣言領域をスキップするための呪文です。ここを飛ばさないと、エラーや予期せぬ空白行を拾ってしまいます。
  • なぜ `Do While` なのか: `For`ループだと、プロシージャの行数がまちまちなので制御が困難です。`i` をプロシージャの行数分だけ強制的に進めることで、スマートに巡回しています。

4. 陥りやすい罠と「プロの心得」

この技術を使う上で、一つだけ注意点があります。

「信頼できるソースへのアクセス」です。
Accessの設定で「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックが入っていないと、このプログラムはセキュリティエラーで停止します。

  • 対策: [ファイル] > [オプション] > [セキュリティ センター] > [マクロの設定] で該当箇所を確認してください。

これは、自分の書いたコードを外部から改ざんできる強力な権限です。だからこそ、OSやAccessが慎重にガードしているのです。「大きな力には大きな責任が伴う」。この言葉を胸に、自動化ツールを開発してください。

まとめ:ここをクリアすれば、あなたはもう中級者

今回紹介したVBE操作は、単なる「リストアップ」に留まりません。応用すれば、「特定のキーワードを含むプロシージャを一括検索する」「コードの行数をカウントして肥大化したモジュールを特定する」といった、保守の自動化が自由自在になります。

Access VBAは、単なる事務処理の道具ではありません。自分の書いたコードを客観的に解析し、自らメンテナンスし続ける。その「自己循環型開発」の入り口に、あなたは今立ちました。

次は、取得したプロシージャ名をテーブルに書き出し、Access上で自分専用の「コード仕様書」を作ってみてください。きっと、Accessを見る目がガラリと変わるはずですよ。

応援しています。分からないことがあれば、いつでもまた聞きに来てくださいね。

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