Accessマクロで作る 受注管理「編集」フォームの作り方

受注データの詳細確認と編集を行うページです。受注照会ページの詳細ボタンから開き、手配番号1件分の情報を参照しながら、必要に応じて内容の訂正や取消ができます。同一図番の受注履歴・売上履歴もあわせて確認できるため、過去の分納状況を踏まえた判断がその場で行えます。編集内容の更新は権限を持つユーザーに限定し、参照はどなたでも可能な設計です。

このページでは以下のことを解説しています。

  • 手配番号をキーに現在の登録内容をすべて自動展開表示(受注区分が「マスタなし」等の場合のみ図番欄を一時的に編集可能化)
  • 同一図番の受注履歴(分納状況を納期降順で確認)と、手配番号に紐づく売上履歴を並べて参照
  • 権限のないユーザーでも参照は可能、編集更新ボタンは管理者権限を持つ場合のみ有効化
  • 受注データの取消は物理削除せず、取消フラグ・取消日を記録して履歴を残す設計
  • 受注を取り消すと、連動する仕入先発注データにも自動で取消フラグ・取消日を反映(データの矛盾を防止)
  • 生産管理セクションの納期回答データを参照する導線

受注編集フォームの画面構成

受注照会ページの詳細ボタンから開く、参照と編集を兼ねた画面です。手配番号をキーに現在の登録内容をすべて展開表示し、同じ図番の受注履歴・売上履歴もあわせて確認できます。

F20受注編集フォーム フォームビュー

F20受注編集フォーム デザインビュー

受注照会フォームの解説ページ

関連記事

受注データの一覧確認と絞り込み検索を行うためのページです。納期範囲・取引先・図番・手配番号・納期回答という複数の切り口から目的のデータへすぐに辿り着けるほか、分納が完了していない注残データだけに絞り込む機能も備えています。詳細な確認や訂正が[…]

この編集フォームは受注照会ページの詳細ボタンから開く姉妹ページの画面です。一覧・検索・注残リストの仕組みは受注照会ページで解説していますので、あわせてご覧ください。

主な構成要素

コントロール 種別 役割
手配番号/受注区分〜現品票区分 非連結 新規登録・訂正ページと同様の項目一式
取消日 非連結テキスト 取消処理を行った日付
図番ID 非連結(グレー表示) 図番受注履歴サブフォームの抽出キー
納期回答詳細ボタン ボタン 生産管理セクションの納期回答データを参照
図番受注履歴サブフォーム サブフォーム 同一図番の受注履歴一覧+合計数量
売上履歴サブフォーム サブフォーム 手配番号に紐づく売上履歴一覧
編集更新ボタン ボタン 権限がある場合のみ編集内容を確定

◆リンクカード:Access生産管理 納期回答フォーム設計(URL未定)

納期回答詳細ボタンは、生産管理セクションで客先へ回答した納期のデータを参照するボタンです。生産管理カテゴリーのページ作成時に、こちらへのリンクを設置予定です。


詳細ボタンから編集フォームを開くマクロ設計

一覧の詳細ボタンを押すと、手配番号を受け渡したうえで編集フォームを開き、続けて値展開用の共通マクロを呼び出します。さらに権限が管理者(権限=2)の場合のみ、編集更新ボタンを使用可能にします。同時に別のサブマクロで非連結フォームの編集ページにデータを転記します。

サブマクロ:編集開く

サブマクロのテキスト表示
サブマクロ:編集開く
フォームを開く(F20受注編集, フォーム ビュー, , , , 標準)
値の代入
 アイテム = [Forms]![F20受注編集]![手配番号]
 式    = [Forms]![F20受注リスト]![F20受注リストサブ]![手配番号]
マクロの実行 (M20受注.編集表示,,)
If [Forms]![F00メインメニュー]![権限]=2 Then
 値の代入
  アイテム = [Forms]![F20受注編集]![編集更新].Enabled
  式    = True
If 文の最後
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 選んだ行の手配番号を編集フォームへ渡し、共通の値展開マクロを実行したうえで権限に応じて編集可否を切り替える
実行タイミング 一覧の詳細ボタンクリック時
処理内容 編集フォームを開く→手配番号を渡す→編集表示マクロ実行→権限=2なら編集更新ボタンを有効化

マクロの設置場所

項目 内容
格納先 F20受注リストフォームの一覧内「詳細」ボタン
呼び出し元 ユーザーによる詳細ボタンクリック
編集更新ボタンは、権限を満たさないユーザーには初期状態のまま(Enabled=False)で表示されます。管理者以外のユーザーでも詳細情報の参照や履歴確認はできつつ、誤って更新してしまうことは物理的に防いでいる設計です。

サブマクロ:編集表示の仕組みと設計

編集フォームが開いた直後に、手配番号をキーとしてT20受注Mの現在値を各コントロールへ一括で流し込みます。受注区分が2(マスタなしなど図番の直接編集が必要な区分)の場合は、図番コントロールを一時的に編集可能にする分岐も含まれています。

サブマクロ:編集表示

サブマクロのテキスト表示
サブマクロ:編集表示
値の代入
 アイテム = [Forms]![F20受注編集]![受注区分]
 式    = DLookUp("受注区分","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]")
値の代入 ([Forms]![F20受注編集]![受注日], DLookUp("受注日","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![図番], DLookUp("図番","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![図番ID], DLookUp("図番ID","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![取引先コード], DLookUp("取引先コード","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![単価], DLookUp("単価","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![納期], DLookUp("納期","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![数量], DLookUp("数量","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![備考], DLookUp("備考","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![発注者コード], DLookUp("従業員コード","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![分納残数], DLookUp("分納残数","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![分納回数], DLookUp("分納回数","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![成形課], DLookUp("成形課","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![加工課], DLookUp("加工課","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![印刷課], DLookUp("印刷課","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![成形フォーキャスト], DLookUp("成形フォーキャスト","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![加工フォーキャスト], DLookUp("加工フォーキャスト","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![現品票区分], DLookUp("現品票区分","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![納期設定], DLookUp("納期設定","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![納期回答], DLookUp("納期回答","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
値の代入 ([Forms]![F20受注編集]![取消日], DLookUp("取消日","T20受注M","手配番号=[Forms]![F20受注編集]![手配番号]"))
If [Forms]![F20受注編集]![受注区分]=2 Then
 値の代入
  アイテム = [Forms]![F20受注編集]![図番].Enabled
  式    = True
 値の代入
  アイテム = [Forms]![F20受注編集]![図番].Locked
  式    = False
If 文の最後
再クエリ ()
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 手配番号をキーに、T20受注Mの現在値を編集フォームの全コントロールへ復元表示する
実行タイミング 編集フォームを開いた直後(編集開くマクロから呼び出し)
処理内容 各コントロールへDLookupで現在値を代入→受注区分が2の場合のみ図番を編集可能にする→再クエリ

マクロの設置場所

項目 内容
格納先 M20受注共通マクロ内「編集表示」サブマクロ
呼び出し元 編集開くマクロからのマクロの実行アクション

新規登録の訂正フォームと同じDLookup方式ですが、受注区分によって図番の編集可否まで切り替えている点が編集フォームならではの作りです。通常は図番を直接書き換えられないようロックしていますが、区分によっては現場の実態に合わせて編集を許可する必要があるための分岐です。


図番受注履歴・売上履歴サブフォームの構成

編集フォームには2つのサブフォームがあり、同じ図番の過去の受注状況と、その手配番号に対する売上(納品)履歴を並べて確認できます。オペレーターが分納状況や過去の納品実績を参照しながら編集・判断できるようにするためのものです。

図番受注履歴サブフォーム

同図番の過去に受注した履歴を納期降順で表示します。完納はグレーダウンし分納はブルーで表示されます。(条件付き書式設定)

図番受注履歴サブフォーム フォームビュー

Q20 受注編集履歴サブ デザインビューの一部(図番受注履歴サブフォーム)

図番受注履歴サブフォーム(Q20受注編集履歴サブ)のクエリ構成

フィールド テーブル 抽出条件
納期/数量/単価/金額/手配番号/納期回答/分納残数/分納回数/出荷状況 T20受注M
図番ID T20受注M [Forms]![F20受注編集]![図番ID]
手配番号 T20受注M Not Like “F*” And Not Like “SS*”
取消日/受注日/ID T20受注M

手配番号の抽出条件(F手配・SS始まりを除外)は、図番の純粋な受注履歴だけを見たい場面で、F手配などの特殊な手配区分のデータを混在させないための条件です。

手配番号の抽出条件(Not Like “F*” And Not Like “SS*”)は、図番の純粋な受注履歴だけを見たい場面で、F手配などの特殊な手配区分のデータを混在させないための条件です。通常の受注とは性質の違うデータをあらかじめ除外しておくことで、履歴を見るオペレーターが余計な判断をせずに済む作りになっています。(フォーキャスト手配と作り直し手配につける記号)

売上履歴サブフォーム

同じ手配番号の売上状態を確認するサブフォーム。分納・完納状態だと表示されるます。売上状態を確認して納品状況を把握します。

売上履歴サブフォーム フォームビュー

Q20受注編集売上サブ デザインビュー(売上履歴サブフォーム)

売上履歴サブフォーム(Q20受注編集売上履歴サブ)のクエリ構成

フィールド テーブル 抽出条件
売上日/数量/備考 T25売上M
手配番号 T25売上M [Forms]![F20受注編集]![手配番号]
図番 T20受注M(結合)
売上履歴は分納日や完納日を知りたい場面で参照します。分納中の受注は複数回の売上(納品)が発生するため、いつ・いくつ納品したかをこのサブフォームでさかのぼって確認できます。

編集更新ボタンのマクロ設計と取消連動処理

編集内容を確定する編集更新ボタンには、通常の更新確認に加えて「取消」フラグが立っている場合の専用分岐があります。取消時は仕入先発注データも連動して取り消す仕組みです。

サブマクロ:編集更新

サブマクロのテキスト表示
サブマクロ:編集更新
If [取消]=True Then
 メッセージボックス(取消するデータとして処理します。連動する仕入先発注データも取り消しします, はい, 警告, 連動取消)
If 文の最後
警告音
If MsgBox("編集したデータを訂正してよろしいですか?",4+32,"確認")=6 Then
 メッセージの設定(いいえ)
 クエリを開く(Q20受注編集仕入先発注更新, データシート, 編集)
 クエリを開く(Q20受注編集更新, データシート, 編集)
 メッセージボックス(更新しました, はい, なし, 更新済)
 ウィンドウを閉じる(フォーム, F20受注編集, 確認)
 再クエリ ()
 マクロの中止
Else
 メッセージボックス(処理を中止します, はい, なし, 中止)
 マクロの中止
If 文の最後
サブマクロの最後

マクロの概要

項目 内容
目的 編集内容をT20受注Mへ反映し、取消の場合は仕入先発注データも連動して取り消す
実行タイミング 編集更新ボタンクリック時
処理内容 取消フラグがTrueなら事前警告メッセージ→更新確認ダイアログ→仕入先発注更新クエリ実行→受注データ更新クエリ実行→完了メッセージ→フォームを閉じる→一覧を再クエリ

マクロの設置場所

項目 内容
格納先 F20受注編集フォームの「編集更新」ボタン
呼び出し元 権限を満たすユーザーによるボタンクリック(権限がない場合はボタン自体が無効化)
取消時のメッセージボックスは「はい」ボタンのみのため、実質的には通知に近い扱いです。VBAであればConfirmダイアログでキャンセル可否を細かく制御できますが、ここでは「取消操作は事前の編集フォーム表示の時点で慎重に行うもの」という前提で、後段の更新確認ダイアログ(はい/いいえ)に判断を委ねる作りにしています。

Q20受注編集更新クエリ デザインビュー(一部)

Q20受注編集更新クエリの構成(抜粋)

フィールド レコードの更新
受注区分/受注日/取引先コード/図番/納期/数量/単価/備考 [Forms]![F20受注編集]![各コントロール]
分納残数/分納回数/成形課/加工課/印刷課 [Forms]![F20受注編集]![各コントロール]
従業員コード/成形フォーキャスト/加工フォーキャスト/現品票区分 [Forms]![F20受注編集]![各コントロール]
更新者コード [Forms]![F00メインメニュー]![従業員コード]
取消日/取消 [Forms]![F20受注編集]![取消日]/[取消]
抽出条件(手配番号) [Forms]![F20受注編集]![手配番号]

Q20受注編集仕入先発注更新クエリ デザインビュー

Q20受注編集仕入先発注更新クエリの構成

項目 内容
対象テーブル T31仕入先発注M
更新フィールド 取消=[Forms]![F20受注編集]![取消]/取消日=[Forms]![F20受注編集]![取消日]
抽出条件 手配番号元=[Forms]![F20受注編集]![手配番号]

受注データを取り消すと、同じ手配番号を元に発行された仕入先発注データにも自動で取消フラグと取消日が反映されます。受注側だけ取り消して仕入先発注側が生きたまま残ってしまう、というデータの矛盾をこの1本のクエリで防いでいます。

取消はレコードを物理削除せず、取消フラグと取消日を立てるだけの処理です。データを消してしまうと「いつ・誰が・何を取り消したか」という履歴が失われてしまうため、あえて残す設計になっています。受注照会ページの一覧では、この取消フラグを条件付き書式で拾ってグレーアウト表示しており、取消済みのデータも一覧上でひと目でわかるようになっています。


まとめ

受注編集フォームは、DLookupによる値展開・図番受注履歴と売上履歴という2つの参照用サブフォーム・権限による編集可否制御・取消時の仕入先発注連動という4つの要素で構成されています。参照だけしたいユーザーにも情報は開きつつ、実際の更新は権限者のみに絞り、取消という重い操作には確認と連動処理を確実に挟む設計です。一覧・検索の仕組みは姉妹ページの受注照会ページで解説していますので、あわせてご覧ください。

本サイトではマクロを用いた構築手順を中心に紹介していますが、決してマクロを唯一の正解として推奨しているわけではありません。VBAが扱える環境であれば、より多彩で柔軟なプログラムが組めるVBAでの構築をむしろ推奨したいと考えています。

ここでマクロという選択肢を提示しているのは、VBAにハードルを感じている方への「もう一つの入り口」として、また将来的な後継者への引き継ぎ負荷を抑えるという実務上のメリットを考慮してのことです。設計の考え方の一つとして、状況に合わせて活用してください。