【入門編】【初心者】テーブルのフィールドプロパティ「標題」をVBAで一括設定し、フォーム作成時のラベル名を自動化する – Access VBA解析バイブル

スポンサーリンク

フォーム作成の「ラベル修正」にサヨナラを。Access「標題(Caption)」一括設定の極意

こんにちは。Access開発の世界へようこそ。

Accessでフォームを作る際、こんな経験はありませんか?
「テーブルのフィールド名が『User_Name_01』のままだから、フォームを作るとラベルも『User_Name_01』になってしまい、いちいち手作業で『氏名』に書き換えている……」

もしあなたが毎回手作業でラベルを直しているなら、それは「Accessの機能を半分しか使っていない」状態です。

実は、テーブルのフィールドプロパティにある「標題(Caption)」を一度設定してしまえば、Accessは勝手にその名前をフォームのラベルとして採用してくれます。今日は、この「標題」をVBAで一括設定し、開発効率を爆上げする「自動化の作法」を伝授します。

—

1. なぜ「標題」プロパティを設定するのか?

Accessは、フォームウィザードで画面を作る際、「フィールド名」よりも「標題」を優先してラベルに表示するという性質を持っています。

  • フィールド名: プログラム上の名前(半角英数字推奨・空白不可)
  • 標題(Caption): ユーザーに見せる名前(日本語OK・空白OK)

この役割分担を理解することが、Accessデータベース構築の第一歩です。これさえ押さえれば、フォーム作成後の修正時間はゼロになります。

—

2. 実践:VBAで「標題」を一括設定する

それでは、実際にコードを書いてみましょう。DAO(Data Access Objects)という、Accessのテーブル操作を司る強力な道具を使います。

コードの解説

このコードは、指定したテーブルの全フィールドを巡回し、まだ「標題」が設定されていない場合に、フィールド名をそのまま標題に代入する(あるいは特定のルールで書き換える)というものです。

Public Sub SetFieldCaptions()
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_顧客マスター”)

‘ 各フィールドをループ処理
For Each fld In tdf.Fields
‘ 標題(Caption)プロパティを取得・設定する
‘ 注意: 初めて設定する場合、プロパティがまだ存在しないためエラーになる
On Error Resume Next ‘ エラー回避(標題がない場合に備える)

‘ 標題に「氏名」のような日本語を設定したい場合
‘ ここでは例として、フィールド名が「UserName」なら「氏名」と設定するロジック
If fld.Name = “UserName” Then
fld.Properties(“Caption”) = “氏名”
Else
‘ プロパティが存在しない場合に備えて作成を試みる
Set prp = fld.CreateProperty(“Caption”, dbText, fld.Name)
fld.Properties.Append prp
End If

On Error GoTo 0 ‘ エラーハンドリングを元に戻す
Next fld

MsgBox “標題の設定が完了しました!”, vbInformation

‘ 後始末
Set tdf = Nothing
Set db = Nothing
End Sub

—

3. 初心者が陥りやすい「落とし穴」

このコードを書く際、多くの初心者がここでつまずきます。

① 「プロパティが見つかりません」エラー

実は、Accessのフィールドには、「初期状態で『標題』プロパティが存在しない」ものがあります。そのため、いきなり `fld.Properties(“Caption”) = “テスト”` と書くと、「そんなプロパティはないよ!」とAccessに怒られます。

  • 解決策: 上記のコードのように `CreateProperty` を使って、存在しない場合はプロパティを生成する工程が必要です。

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

VBAエディタ(VBE)を開き、メニューの「ツール」→「参照設定」を確認してください。「Microsoft Office 16.0 Access database engine Object Library」にチェックが入っていればOKです。これがないと、`DAO.Database` という言葉が通じません。

—

4. プロの視点:なぜあえてVBAで行うのか?

「プロパティシートから手入力すればいいじゃないか」と思うかもしれません。しかし、現場では「テーブルが100個ある」とか「仕様変更で全てのラベルを書き換えろ」という状況が発生します。

手作業はミスを招きますが、VBAは「定義の正解」をコードとして保持できるため、何度でも正確に再現可能です。これが、マクロの記録から脱却し、真のエンジニアになるための思考です。

今後のステップ

ここをクリアしたあなたは、もう「Accessの操作」ではなく「Accessの設計」ができる段階に足を踏み入れています。次は、フォーム上のコントロール(テキストボックス等)のプロパティをVBAで一括制御する手法へと進んでみてください。

わからないことがあれば、またいつでも聞いてください。あなたの開発効率が最大化されることを心から応援しています!

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