こんにちは、なかぜんです。
Accessで複雑な入力画面をたくさん作っていると、「毎回似たようなダイアログを手作業で組むのが面倒…」なんて感じたことはありませんか?
そんなときに役立つのが「JSONによるダイアログ定義の自動構築」です。柔軟かつ再利用可能な仕組みを取り入れることで、業務効率がぐんとアップします。
JSONを使うメリットとは?
従来のVBAフォーム構築は、コントロールの配置や設定を手作業で行うことが一般的でした。しかし、以下のような課題がありました:
- 同じようなフォームを複数作成・管理するのが手間
- 表示項目の切り替えにコード変更が必要
- 保守性や柔軟性が低い
そこでJSONの出番です!
JSON(JavaScript Object Notation)は、構造化されたデータを表現するための軽量フォーマット。これを使って、ダイアログの項目定義や表示順序、ラベル名などを柔軟に管理できるようになります。
JSON定義の基本構成
例えば、次のようなJSONデータを使って、フォーム項目を定義できます:
{
"title": "ユーザー情報入力",
"fields": [
{ "label": "氏名", "name": "txtName", "type": "TextBox", "width": 200 },
{ "label": "生年月日", "name": "txtBirth", "type": "DatePicker" },
{ "label": "メールアドレス", "name": "txtEmail", "type": "TextBox", "width": 250 }
]
}
このようなJSONファイルをもとに、VBAで動的にフォームを構築します。
VBAによるJSON読み込みとフォーム自動生成
1. 参照設定
まずはJSONを扱うために、以下の参照設定を追加しましょう:
Microsoft Scripting Runtime
Microsoft VBScript Regular Expressions 5.5
- JSON解析用ライブラリ(VBA-JSON)※[github.com/VBA-tools/VBA-JSON](https://github.com/VBA-tools/VBA-JSON)から入手
2. JSONの読み込み
Function LoadJsonFromFile(filePath As String) As Dictionary
Dim jsonText As String
Dim fso As FileSystemObject
Dim ts As TextStream
Set fso = New FileSystemObject
Set ts = fso.OpenTextFile(filePath, ForReading)
jsonText = ts.ReadAll
ts.Close
Set LoadJsonFromFile = JsonConverter.ParseJson(jsonText)
End Function
解説:この関数はJSONファイルを読み込み、Dictionary形式で返します。
3. ダイアログ生成メイン処理
Sub BuildDialogFromJson(jsonPath As String)
Dim data As Dictionary
Dim fld As Dictionary
Dim frm As Form
Dim ctl As Control
Dim i As Integer, topPos As Integer
Set data = LoadJsonFromFile(jsonPath)
DoCmd.OpenForm "F_DynamicDialog", acDesign
Set frm = Forms("F_DynamicDialog")
frm.Caption = data("title")
topPos = 500
For Each fld In data("fields")
Set ctl = CreateControl(frm.Name, acLabel, , , fld("label"), 500, topPos, 2000, 300)
topPos = topPos + 300
Select Case fld("type")
Case "TextBox"
Set ctl = CreateControl(frm.Name, acTextBox, , , "", 2500, topPos - 300, fld("width"), 300)
Case "DatePicker"
Set ctl = CreateControl(frm.Name, acTextBox, , , "", 2500, topPos - 300, 1500, 300)
'カレンダーアイコンの追加処理など応用可
End Select
Next fld
DoCmd.Close acForm, "F_DynamicDialog", acSaveYes
DoCmd.OpenForm "F_DynamicDialog", acNormal
End Sub
解説:JSONで定義された各項目に従ってラベルとコントロールを動的に生成しています。項目数が多くても定義ファイルを変えるだけでOKです。
よくあるミス・注意点
- JSONの構文ミス(カンマや括弧の抜け)はパース時にエラーになります
- コントロール名の重複には注意(CreateControlでエラー)
- 事前にダイアログ用フォーム(空)を作っておく必要があります
- 必ずDesignViewで開いてからコントロールを追加すること
応用ポイント
- 多言語対応:言語ごとのJSONを用意してUIを切り替える
- バリデーション定義:各項目に
"required": true
などを指定して入力チェック - イベント紐づけ:定義にイベント名を入れて、VBA内でハンドラー割り当て
- JSONをDBに保存:フォーム設計情報をテーブルに保存し、動的に呼び出す
まとめ:JSONで広がるAccess UIの可能性
今回は、JSONを使ってAccessのフォームを柔軟かつ自動的に構築する方法をご紹介しました。
従来の手動設計では難しかった「使いまわし」「保守性」「柔軟性」が一気に高まるのが大きな魅力です。
Accessはまだまだ進化できます。ぜひ一度、あなたの業務アプリにも取り入れてみてくださいね。
次のステップ
- フォームの「編集・保存」もJSON定義でできる?→できます!
- 応用:APIから取得したJSONをもとにダイアログを構築
- Access診断ツールと連携したフォーム自動生成
それではまた次回、なかぜんでした!
¥2,992 (2025/05/24 20:57時点 | Amazon調べ)
