【入門編】【中級】フィールドの「説明」プロパティをVBAで一括更新してドキュメント化を自動化する – Access VBA解析バイブル

スポンサーリンク

Accessの「説明」プロパティを完全掌握せよ:ドキュメント自動化で手作業から卒業する

こんにちは。現場の最前線でAccessを叩き込み続けているエンジニアです。

皆さんは、テーブル定義書を作るために、Accessのテーブルを見ながらExcelにせっせと項目を書き写していませんか?その作業、今日で最後にしましょう。

Accessには、各フィールドに「説明(Description)」というプロパティが隠されています。ここをVBAで制御できるようになれば、テーブル内に仕様を埋め込み、必要に応じていつでも一覧表を書き出せるようになります。

今日は、VBAを使ってこの「説明」を一括設定し、「データベース自身に自らの仕様書を語らせる」ための極意を伝授します。

1. なぜ「プロパティ」に直接書き込むのか?

Accessの開発現場で一番の敵は「ドキュメントと実態の乖離」です。Excelの定義書は、テーブルに新しい列が追加された瞬間に古くなります。

しかし、テーブルのプロパティに直接説明を書いておけば、データベースファイル(.accdb)さえあれば仕様が確認できます。「データと仕様が常に運命共同体であること」。これこそが、堅牢なシステムを作るための第一歩です。

2. 実装の極意:Propertyオブジェクトの扱い方

Access VBAでテーブル構造をいじるには、`DAO`というデータベースエンジンを操作するライブラリを使います。ここがAccess VBAの「心臓部」です。

基本コード:フィールド説明を一括更新する

以下のコードは、指定したテーブルの全フィールドに対して、VBAから説明文を書き込むためのテンプレートです。

Sub UpdateFieldDescriptions()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Dim prp As DAO.Property

Set db = CurrentDb
‘ 対象のテーブル名を指定
Set tdf = db.TableDefs(“T_顧客マスター”)

‘ エラー回避用の設定:プロパティがない場合を想定
On Error Resume Next

For Each fld In tdf.Fields
‘ フィールド名に応じた説明文を生成(実務では配列や辞書から取得すると便利)
Dim descText As String
descText = “【システム用】” & fld.Name & “の値を保持します”

‘ Descriptionプロパティを取得・設定
Set prp = fld.Properties(“Description”)

If Err.Number <> 0 Then
‘ プロパティが存在しない場合は作成する(重要!)
Set prp = fld.CreateProperty(“Description”, dbText, descText)
fld.Properties.Append prp
Err.Clear
Else
‘ すでに存在する場合は更新
prp.Value = descText
End If
Next fld

MsgBox “更新完了!これでドキュメント化の準備はバッチリです。”
End Sub

3. ここで躓くな!初心者が陥りやすい「3つの罠」

このコードを動かす際、初心者が必ず直面する壁があります。ここをクリアすれば、あなたはもう中級者の仲間入りです。

① 「プロパティがない」エラー

Accessのフィールドには、デフォルトでは「Description」というプロパティが存在しない場合があります。`fld.Properties(“Description”)` をいきなり参照するとエラーになるのはそのためです。

  • 対策: 上記コードのように `On Error Resume Next` で囲い、エラーが起きたら `CreateProperty` で生成するという手順を踏むのが定石です。

② DAOライブラリの参照設定

もしコードが動かない場合、VBAエディタのメニュー「ツール」>「参照設定」で “Microsoft Office 16.0 Access database engine Object Library” にチェックが入っているか確認してください。これがないと、AccessはDAO語を理解できません。

③ 実行タイミングの注意

`TableDef`を操作している間は、対象のテーブルは「閉じて」おかなければなりません。テーブルを開いたままコードを実行すると「テーブルが使用中です」というエラーが出ます。エンジニアの作法として、処理前には必ず関連フォームやテーブルを閉じる癖をつけましょう。

4. 次のステップ:自動化の先へ

今回、プロパティに値を流し込めるようになりましたね。ここまで来れば、次は「このプロパティを読み取って、自動的にExcelの定義書に書き出す」という逆のプロセスも簡単です。

1. 書き込む(今回のテーマ):仕様をソースコード(データベース)に埋め込む。
2. 読み取る:`For Each` で全プロパティをループさせ、Excelセルに転記する。

このサイクルを確立すれば、「仕様書作成」という退屈な作業から完全に解放されます。

VBAは、単なる自動化ツールではありません。あなたの「思考の拡張デバイス」です。面倒なことはすべてコードに任せ、あなたはより本質的な「設計」や「ロジック」に時間を割いてください。

また次の極意でお会いしましょう。質問があればいつでもどうぞ。あなたの挑戦を応援しています。

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