Access上級者向け|JSONを使ったダイアログ定義の自動構築

Access

こんにちは、なかぜんです。

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調べ)
\楽天ポイント4倍セール!/
楽天市場
\商品券4%還元!/
Yahooショッピング