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は、単なる自動化ツールではありません。あなたの「思考の拡張デバイス」です。面倒なことはすべてコードに任せ、あなたはより本質的な「設計」や「ロジック」に時間を割いてください。
また次の極意でお会いしましょう。質問があればいつでもどうぞ。あなたの挑戦を応援しています。
