製品マスタの編集フォームは新規登録フォームと同じ非連結の設計思想で構成されています。製品マスタ基本情報フォームの編集ボタンから図番IDを引き継ぎ、DLookupで全フィールドを転記した上で編集・更新する仕組みです。テーブルに直結させない理由には、複数ユーザーが同時に同じレコードを扱う際の排他モードを避ける狙いがあります。
編集画面を開く
製品マスタ基本情報フォームのフッターにある編集ボタンを押すと、F10製品編集フォームが起動します。フリガナ検索のような呼び出しコンボボックスは持たず、表示中の図番IDをそのまま引き継いで全フィールドを転記する設計です。
製品マスタ基本情報フォームのフッター(編集ボタンから開く)
編集ボタンのマクロ
製品マスタ基本情報フォームの編集ボタンに設定されたマクロです。F10製品編集をフォームビューで開き、図番IDをキーにT10製品MからDLookupで全フィールドを転記します。作業工程・工程担当も含めて全コントロールがこの1サブマクロで一括転記されます。
サブマクロ:編集開く
- サブマクロのテキスト表示
-
サブマクロ:編集開く フォームを開く (F10製品編集, フォーム ビュー, , , , 標準) 値の代入 アイテム = [Forms]![F10製品編集]![図番ID] 式 = [Forms]![F00メインメニュー]![図番ID] 値の代入 アイテム = [Forms]![F10製品編集]![図番] 式 = DLookUp("図番","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]") 値の代入 ([Forms]![F10製品編集]![取引先コード], DLookUp("取引先コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![品名], DLookUp("品名","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![単価], DLookUp("単価","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![成形課], DLookUp("成形課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![加工課], DLookUp("加工課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![印刷課], DLookUp("印刷課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![品証課], DLookUp("品証課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![業務課], DLookUp("業務課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![営業課], DLookUp("営業課","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![現品票区分], DLookUp("現品票区分","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![成形フォーキャスト], DLookUp("成形フォーキャスト","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![加工フォーキャスト], DLookUp("加工フォーキャスト","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![重要事項], DLookUp("重要事項","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![備考], DLookUp("備考","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![営業メモ], DLookUp("営業メモ","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![登録日], DLookUp("登録日","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![工程1], DLookUp("工程1","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) ~ 値の代入 ([Forms]![F10製品編集]![工程16], DLookUp("工程16","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![工程作業者1], DLookUp("工程作業者1","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) ~ 値の代入 ([Forms]![F10製品編集]![工程作業者16], DLookUp("工程作業者16","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![在庫数], DLookUp("在庫数","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![在庫更新日], DLookUp("在庫更新日","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![登録者コード], DLookUp("登録者コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![工程群コード], DLookUp("工程群コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![業種コード], DLookUp("業種コード","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 値の代入 ([Forms]![F10製品編集]![納期設定], DLookUp("納期設定","T10製品M","[図番ID]=[Forms]![F00メインメニュー]![図番ID]")) 再クエリ () マクロの中止 サブマクロの最後
マクロの概要
| アクション | 内容 |
|---|---|
| フォームを開く | F10製品編集をフォームビューで起動 |
| 値の代入(図番ID) | F00メインメニューの図番IDを引き継ぎ |
| 値の代入(基本情報) | 図番・取引先コード・品名・単価・各課フラグ・現品票区分・フォーキャストなどをDLookupで取得 |
| 値の代入(工程1〜16・工程作業者1〜16) | 作業工程サブフォーム相当の項目もDLookupで取得 |
| 再クエリ | フォーム全体の表示を更新 |
サブマクロ:編集開くの設置場所
| 設置場所 | ボタン名 |
|---|---|
| 製品マスタ基本情報フォーム フッター | 編集 |
編集画面の構成
F10製品編集 ポップアップフォームビュー
F10製品編集の画面の概要
| 項目 | 内容 |
|---|---|
| 図番ID | F00メインメニューから引き継ぎ(非表示) |
| 図番・取引先・品名・単価 | T10製品MからDLookupで取得して編集可能 |
| 関連部署(成形課〜営業課) | チェックボックスで関連部署を編集 |
| 現品票区分 | オプショングループで成形/加工/印刷を選択 |
| フォーキャスト | 成形・加工のチェックボックス |
| 作業工程・工程担当 | 1〜16行を非連結コンボボックスで編集 |
| 仕入先マスタ登録 | 新規登録フォームと同じ仕組みで仕入先を追加・編集 |
| 仕入先情報サブフォーム | 登録済み仕入先の一覧表示 |
| 編集更新ボタン | 図番IDをキーに更新クエリを実行 |
| 閉じるボタン | フォームを閉じる |
黒系の画面は編集中のサイン
このシステムでは編集フォームを黒系の配色で統一しています。画面を開いた瞬間に「既存データを編集している」と視覚で判断できる設計です。新規登録の青系と明確に異なる配色にすることで、誤操作の抑止にも働きます。配色ルールはシステム全体で共通のため、どのフォームを開いても同じ視覚的感覚で操作できます。
色調・配色ページ
Accessのフォームにおける「色」は、単なるデザイン要素ではありません。オペレーターが今どこにいて何をすべきかを直感的に伝えるための「重要なナビゲーション」だと考えています。 画面を開いた瞬間に「新規登録」か「編集」かを色で感じ取り、無[…]
編集をデザインビューで見る仕組み
製品マスタの編集フォームは図番IDをキーにしたDLookupで全フィールドを転記し、更新は更新クエリで一括反映する非連結フォームです。テーブルやクエリに直接結びつけた連結フォームにしない理由は、複数ユーザーが同時に同じレコードを開いた場合の排他モードを避けるためです。
連結フォームでレコードを編集中、別のユーザーが同じレコードを開こうとすると、Accessは編集中のレコードをロックし、もう一方のユーザーは読み取り専用でしか開けなくなります。製造現場では複数の課が同じ図番の製品マスタを同時に参照・編集する場面が珍しくないため、この排他ロックが業務のボトルネックになりかねません。
非連結フォームであれば、フォーム自体はテーブルと直結していないため排他ロックが発生しません。複数ユーザーが同じ図番の編集フォームを同時に開いて作業しても、それぞれが独立して入力を進められます。更新時のみ更新クエリで一括反映するため、最後に保存した内容が反映される形にはなりますが、開いている間の操作がブロックされることはありません。
F10製品編集 ポップアップフォームデザインビュー
デザインビューの概要
| 項目 | 設定内容 |
|---|---|
| フォーム名 | F10製品編集 |
| レコードソース | 空欄(非連結フォーム) |
| 配色 | 黒系(編集中のサイン) |
| 作業工程・工程担当 | 非連結コンボボックス(1〜16) |
| 仕入先マスタ登録 | 新規登録フォームと同じ仕組み |
仕入先マスタ登録
編集フォーム上の仕入先マスタ登録エリアは、新規登録フォームと同じ仕組みです。仕入先を選択し関連工程(成形・加工・印刷・材料)をチェックして登録ボタンを押すと、仕入先情報サブフォームに一覧表示されます。詳しい仕組みは新規登録ページを参照してください。
仕入れ先マスタ登録
製品マスタの新規登録は管理者のみが実行できます。基本情報・営業課情報・工程情報をこのフォームで一括登録し、関連する課のテーブルに図番IDを自動追加することで各課担当者が課別情報を登録するベースが完成します。仕入先製品マスタへの登録もこのフォ[…]
訂正更新ボタンのマクロ
確認ダイアログを経てQ10製品編集更新を実行し、T10製品Mを更新します。完了後はM10製品.表示マクロで基本情報フォームの表示を最新化し、編集フォームを閉じます。
サブマクロ:編集更新
マクロの概要
| アクション | 内容 |
|---|---|
| 警告音 | 更新前に警告音で注意を促す |
| MsgBox 確認 | 更新前に確認ダイアログを表示 |
| クエリを開く | Q10製品編集更新でT10製品Mを更新 |
| マクロの実行 | M10製品.表示で基本情報フォームの表示を最新化 |
| ウィンドウを閉じる | F10製品編集を閉じて基本情報フォームに戻る |
マクロの設置場所
| 設置場所 | ボタン名 |
|---|---|
| F10製品編集 フッター | 訂正更新 |
Q10製品編集更新クエリの構成
F10製品編集フォームの入力内容で、T10製品Mを図番IDをキーに一括更新するクエリです。基本情報から作業工程・工程担当まで、編集フォーム上の全フィールドがこの1クエリで更新されます。
Q10製品編集更新クエリ(一部)
Q10製品編集更新の構成(更新クエリ)
| 項目 | 内容 |
|---|---|
| クエリの種類 | 更新クエリ |
| 更新対象テーブル | T10製品M |
| 抽出条件 | [Forms]![F10製品編集]![図番ID] |
| 更新フィールド | 図番ID・登録日・取引先コード・備考・重要事項・品名・単価・工程1〜16・工程作業者1〜16・業務課・営業課・成形フォーキャスト・加工フォーキャスト・現品票区分・在庫数・在庫更新日・登録者コード・業種コード・工程群コード・納期設定・成形課・加工課・印刷課・品証課 |
まとめ
製品マスタの編集フォームは新規登録フォームと同じ非連結の設計思想を踏襲し、図番IDをキーにしたDLookupでの転記、更新クエリでの一括反映という流れで構成されています。テーブルに直結させない設計により、複数ユーザーが同じ図番を同時に開いても排他モードによるブロックが発生しません。作業工程・工程担当・仕入先マスタ登録まで含めて1つの編集フォームに集約することで、図番ごとの情報を漏れなく見直せる構成になっています。
本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。
ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。