2021年7月25日日曜日

MS Access ナビゲーション ウィンドウのグループをVBAで変更

Microsoft Access の Navigation Pane にある Group を VBA で変更する方法です。

DoCmd のメソッドで提供されていれば助かるのだが、残念ながら見当たらない。 システムテーブルを直接編集して、CREATE したオブジェクトをグループに追加します。

今回の前提だと、手動で作成したグループに、VBA でオブジェクトを追加します。

使用するシステムテーブルと、その項目

MSysNavPaneGroups で必要な項目
Id Name
一意のId グループ名
(例) 9 グループ1

MSysNavPaneGroupToObjects で必要な項目
GroupID Id Name ObjectID Position
MSysNavPaneGroupsのId 一意のId 任意の項目 MSysObjectsのId 表示順
(例) 9 15 テーブル1 86 1

MSysObjects で必要な項目
Id Name
一意のId 名称1
(例) 86 テーブル1

グループに登録する手順

  1. VIEW 等のオブジェクトを CREATE
  2. MSysObjects から、そのオブジェクトの Id を検索
  3. MSysNavPaneGroups から、追加するグループの Id を検索
  4. MSysNavPaneGroupToObjects から、Idの最大値+1を算出(一意の Id)
    SELECT Max(Id) + 1 FROM MSysNavPaneGroupToObjects
  5. MSysNavPaneGroupToObjects から、Position の連番を算出、開始は1(Position に登録する連番)
    SELECT Nz(Max(Position), 0) + 1 FROM MSysNavPaneGroupToObjects
    WHERE GroupID = [追加するグループの Id]
この結果を元に、MSysNavPaneGroupToObjects にレコードを追加
Flags0(固定値)
GroupID追加するグループの Id
Icon0(固定値)
Id一意の Id
Name追加するオブジェクトの名称(任意)
ObjectID追加するオブジェクトの Id
Position連番