Accessマクロで作る 製造管理「詳細確認・編集」フォームの作り方

仕入先発注照会ページの詳細ボタンから開く姉妹ページです。一覧では参照だけだった発注データを、この画面で詳細確認・訂正・取消でき、さらに作業日報や受入実績、同じ図番の発注履歴まで横断的に確認できるようになっています。「発注数量はそのままに、生産数量だけを現場判断で調整する」という運用もこのページの特徴です。ここでは成形課の製造数量調整を紹介しています。

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

  • 仕入先発注データの詳細確認・訂正・取消の仕組み
  • 作業日報履歴・受入出荷履歴・同図番発注履歴という3つのサブフォームの構成
  • 受入データをその場で訂正できるポップアップの仕組み
  • 数量・生産数量を変更した際に分納残数を自動調整する仕組み
  • 現品票・材料裁断カードの再発行、分納現品票・分納内職カードの発行機能

仕入先発注の詳細確認・編集フォームの画面構成

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

仕入先発注詳細及び編集フォーム

F31仕入先発注成形課編集 フォームデザインビュー

仕入先発注成形課照会フォーム設計はこちら>>>
この編集フォームは仕入先発注照会ページの詳細ボタンから開く姉妹ページの画面です。一覧・検索の仕組みは照会ページで解説していますので、あわせてご覧ください。

主な構成要素

コントロール 種別 役割
手配番号/発注日/仕入先名/図番/仕入先単価/納期/納期設定/数量/生産数量/備考/発注者 非連結 新規登録ページと同様の項目一式
図番ID/分納残数/分納回数 非連結(グレー表示) 参照専用の管理項目
成形課 非連結チェックボックス 部署フラグ(成形課データは常にチェック)
現品票区分 非連結オプションボタン 成形課/加工課/印刷課の3択
手配番号元 非連結 元となった受注の手配番号
取消日 非連結テキスト 取消処理を行った日付
取消 非連結チェックボックス(非表示) 取消日の有無から自動算出される取消フラグ
作業日報履歴サブフォーム サブフォーム 同一手配番号の作業日報一覧+合計作成数
受入・出荷履歴サブフォーム サブフォーム 同一手配番号の受入実績一覧+合計数量(訂正可)
同図番発注履歴サブフォーム サブフォーム 同一図番の成形課発注データ一覧+合計数量
編集更新/現品票再発行/材料裁断カード再発行/分納現品票発行/分納内職カード発行/受入登録/閉じるボタン ボタン 各種機能ボタン
「取消」コントロールはコントロールソースを=IIf([取消日] Is Null,False,True)とした非表示の計算コントロールです。取消日を入力するだけで自動的にTrueへ切り替わるため、取消フラグを別途手入力する手間も入力ミスの心配もありません。

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

照会ページ一覧の詳細ボタンを押すと、手配番号を受け渡したうえで編集フォームを開き、続けて値展開用の共通マクロを呼び出します。

サブマクロ:編集開く

サブマクロのテキスト表示
サブマクロ:編集開く
フォームを開く(F31仕入先発注成形課編集, フォーム ビュー, , , , 標準)
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![手配番号]
 式    = [Forms]![F31仕入先発注成形課リスト]![F31仕入先発注成形課リストサブ]![手配番号]
マクロの実行 (M31仕入先発注成形.編集表示,,)
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 選んだ行の手配番号を編集フォームへ渡し、共通の値展開マクロを実行する
実行タイミング 一覧の詳細ボタンクリック時
処理内容 編集フォームを開く→手配番号を渡す→編集表示マクロ実行

マクロの設置場所

項目 内容
格納先 F31仕入先発注成形課リストフォームの一覧内「詳細」ボタン
呼び出し元 ユーザーによる詳細ボタンクリック
受注編集ページでは権限(管理者権限=2)を満たす場合のみ編集更新ボタンを有効化する分岐がありましたが、成形課仕入先発注編集にはこの制御がありません。ここは成形課が生産数量を自由に調整できるようにする意図的な設計で、元の仕入先発注データ自体は変更されないため、権限を絞る必要がないという判断です。

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

編集フォームが開いた直後に、手配番号をキーとしてT31仕入先発注Mの現在値を各コントロールへ一括で流し込みます。

サブマクロ:編集表示

サブマクロのテキスト表示
サブマクロ:編集表示
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![発注日]
 式    = DLookup("発注日","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![図番]
 式    = DLookup("図番","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![図番ID]
 式    = DLookup("図番ID","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![仕入先コード]
 式    = DLookup("仕入先コード","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![仕入先単価]
 式    = DLookup("仕入先単価","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![納期]
 式    = DLookup("納期","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![数量]
 式    = DLookup("数量","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![設定数量]
 式    = DLookup("設定数量","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![備考]
 式    = DLookup("備考","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![発注者コード]
 式    = DLookup("発注者コード","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![分納残数]
 式    = DLookup("分納残数","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![分納回数]
 式    = DLookup("分納回数","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![成形課]
 式    = DLookup("成形課","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![現品票区分]
 式    = DLookup("現品票区分","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![手配番号元]
 式    = DLookup("手配番号元","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![納期設定]
 式    = DLookup("納期設定","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
値の代入
 アイテム = [Forms]![F31仕入先発注成形課編集]![取消日]
 式    = DLookup("取消日","T31仕入先発注M","[手配番号]=Forms![F31仕入先発注成形課編集]![手配番号]")
再クエリ ()
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 手配番号をキーにT31仕入先発注Mの現在値を各コントロールへ展開する
実行タイミング 編集開くマクロから連続実行
処理内容 全項目をDLookupで展開→再クエリ

マクロの設置場所

項目 内容
格納先 M31仕入先発注成形マクロの「編集表示」サブマクロ
呼び出し元 編集開くマクロからの呼び出し

作業日報履歴・受入出荷履歴・同図番発注履歴サブフォームの構成

仕入先発注編集ページには、作業日報履歴・受入出荷履歴・同図番発注履歴という3つのサブフォームが並んでいます。これは単に関連データを一覧表示しているだけでなく、「今見ている1件の発注が、成形課の実務のどの段階にあるか」を1画面で判断できるようにするための配置です。作業日報で生産の進み具合を、受入出荷履歴で納品実績を、同図番発注履歴で他の発注との兼ね合いを、それぞれ別画面を開かずに確認できます。

作業日報履歴サブフォーム

同じ手配番号で作業日報に登録されている作業履歴データを表示します。

F31仕入先発注成形課編集日報サブ デザインビュー

Q31仕入先発注成形課編集日報サブ クエリデザインビュー

作業日報履歴サブフォーム(Q31仕入先発注成形課編集日報サブ)のクエリ構成

フィールド テーブル 抽出条件
作業日/プレスナンバー/ショット数/作成数/成形ロット番号/備考 T50成形課作業日報 ―
工程名 T10工程名 ―
略称(作業者) T01従業員M ―
手配番号 T50成形課作業日報 [Forms]![F31仕入先発注成形課編集]![手配番号]
ID T50成形課作業日報 ―

受入・出荷履歴サブフォーム

同一手配番号の受入実績を表示するとともに、各行の「訂正」ボタンから、非連結フォーム+DLookup+更新クエリの3点セットでその場でデータを訂正できます。

F31仕入先発注成形課編集受入サブ デザインビュー

Q31仕入先発注成形課編集受入サブ クエリデザインビュー

受入・出荷履歴サブフォーム(Q31仕入先発注成形課編集受入サブ)のクエリ構成

フィールド テーブル 抽出条件
受入日/数量/備考 T32仕入先受入M ―
工程名 T10工程名 ―
略称(受入者) T01従業員M ―
手配番号/図番 T32仕入先受入M 手配番号=[Forms]![F31仕入先発注成形課編集]![手配番号]
ID T32仕入先受入M ―

訂正ボタンからのデータ訂正

受入データを訂正する場合のショートカットになります。訂正ボタンを押すとポップアップフォームが表示され訂正できます。

サブマクロ:訂正開く

サブマクロのテキスト表示
サブマクロ:訂正開く
フォームを開く(F32仕入先受入訂正, フォーム ビュー, , , , 標準)
値の代入
 アイテム = [Forms]![F32仕入先受入訂正]![ID]
 式    = [Forms]![F31仕入先発注成形課編集]![F31仕入先発注成形課編集受入サブ]![ID]
値の代入
 アイテム = [Forms]![F32仕入先受入訂正]![受入日]
 式    = DLookup("受入日","T32仕入先受入M","[ID]=Forms![F32仕入先受入訂正]![ID]")
値の代入
 アイテム = [Forms]![F32仕入先受入訂正]![数量受入]
 式    = DLookup("数量","T32仕入先受入M","[ID]=Forms![F32仕入先受入訂正]![ID]")
値の代入
 アイテム = [Forms]![F32仕入先受入訂正]![合否]
 式    = DLookup("合否","T32仕入先受入M","[ID]=Forms![F32仕入先受入訂正]![ID]")
値の代入
 アイテム = [Forms]![F32仕入先受入訂正]![未完分]
 式    = DLookup("未完分","T32仕入先受入M","[ID]=Forms![F32仕入先受入訂正]![ID]")
値の代入
 アイテム = [Forms]![F32仕入先受入訂正]![備考]
 式    = DLookup("備考","T32仕入先受入M","[ID]=Forms![F32仕入先受入訂正]![ID]")
値の代入
 アイテム = [Forms]![F32仕入先受入訂正]![登録者コード]
 式    = DLookup("登録者コード","T32仕入先受入M","[ID]=Forms![F32仕入先受入訂正]![ID]")
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 選んだ受入行のIDを非連結ポップアップへ渡し、現在の登録値をDLookupで一括展開する
実行タイミング 受入・出荷履歴サブフォームの「訂正」ボタンクリック時
処理内容 ポップアップを開く→ID受け渡し→各項目をDLookupで展開表示

マクロの設置場所

項目 内容
格納先 F31仕入先発注成形課編集受入サブの「訂正」ボタン
呼び出し元 ユーザーによる訂正ボタンクリック

F32仕入先受入訂正 デザインビュー

訂正更新ボタンの概要

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

マクロの概要

項目 内容
目的 ポップアップで訂正した内容をT32仕入先受入Mへ反映する
実行タイミング 訂正更新ボタンクリック時
処理内容 確認ダイアログ→更新クエリ実行→完了メッセージ→ポップアップを閉じる→受入サブを再クエリ

マクロの設置場所

項目 内容
格納先 F32仕入先受入訂正フォームの「訂正更新」ボタン
呼び出し元 ユーザーによる訂正更新ボタンクリック

Q32仕入先受入訂正更新 クエリデザインビュー

受入訂正更新クエリ(Q32仕入先受入訂正更新)の構成

フィールド レコードの更新
受入日 [Forms]![F32仕入先受入訂正]![受入日]
数量 [Forms]![F32仕入先受入訂正]![数量受入]
未完分 [Forms]![F32仕入先受入訂正]![未完分]
合否 [Forms]![F32仕入先受入訂正]![合否]
備考 [Forms]![F32仕入先受入訂正]![備考]
抽出条件(ID) [Forms]![F32仕入先受入訂正]![ID]

同図番発注履歴サブフォーム

同一図番の過去に発注した履歴データを表示します。

Q31仕入先発注成形課編集履歴サブ クエリデザインビュー

つづき

同図番発注履歴サブフォーム(Q31仕入先発注成形課編集履歴サブ)のクエリ構成

フィールド テーブル 演算式・抽出条件
納期/数量/仕入先単価/手配番号/分納残数/分納回数/発注日/備考/設定数量 T31仕入先発注M ―
金額 演算フィールド [数量]*[仕入先単価]
出荷状況 演算フィールド IIf([分納残数]=[数量],”未納”,IIf([分納残数]<=0,”完納”,IIf([分納残数]<>[数量],”分納中”)))
図番ID T31仕入先発注M [Forms]![F31仕入先発注成形課編集]![図番ID]
成形課 T31仕入先発注M True
現品票区分 T31仕入先発注M “1”
同図番発注履歴は図番IDだけで絞り込むと加工課・印刷課など他部署の発注データまで混ざってしまいます。「成形課=True」「現品票区分=”1″」の2条件を重ねることで、このページで解説している成形課データだけに絞り込んでいます。

各サブフォームのタイトル右隣には、DSum関数で合計値を表示する非連結コントロールを設置しています。

サブフォーム 元クエリ 合計表示のコントロールソース
作業日報履歴 Q31仕入先発注成形課編集日報サブ =DSum(“作成数”,”Q31仕入先発注成形課編集日報サブ”)
受入・出荷履歴 Q31仕入先発注成形課編集受入サブ =DSum(“数量”,”Q31仕入先発注成形課編集受入サブ”)
同図番発注履歴 Q31仕入先発注成形課編集履歴サブ =DSum(“数量”,”Q31仕入先発注成形課編集履歴サブ”)

サブフォームの行をハイライトさせる仕組みはこちら>>>
各サブフォームのリスト行には、IDコントロールと連動してカレント行の色を切り替える非連結コントロール(行色)が設置されています。この仕組みは本システムの全リストで共通採用しているため、詳細は上記のリンク先を参照してください。


数量・生産数量コントロールの更新後処理

数量コントロールと生産数量コントロールには、それぞれ更新後処理として専用マクロが設置されています。どちらを訂正したかによって分納残数の再計算元が変わる点がポイントです。

サブマクロ:数量訂正

サブマクロのテキスト表示
サブマクロ:数量訂正
値の代入
 アイテム = [分納残数]
 式    = [数量]
値の代入
 アイテム = [設定数量]
 式    = [数量]
コントロールの移動 (設定数量)
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 発注数量そのものを訂正した際、分納残数・設定数量を数量に合わせて同期する
実行タイミング 数量コントロールの更新後
処理内容 分納残数←数量/設定数量←数量→設定数量コントロールへ移動

マクロの設置場所

項目 内容
格納先 F31仕入先発注成形課編集フォームの「数量」コントロール(更新後処理)
呼び出し元 ユーザーによる数量入力確定時

サブマクロ:生産数量訂正

サブマクロのテキスト表示
サブマクロ:生産数量訂正
値の代入
 アイテム = [分納残数]
 式    = [設定数量]
コントロールの移動
 コントロール名 = 分納残数
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 成形課の現場判断で生産数量だけを訂正した際、分納残数を設定数量に合わせて同期する
実行タイミング 生産数量コントロールの更新後
処理内容 分納残数←設定数量→分納残数コントロールへ移動

マクロの設置場所

項目 内容
格納先 F31仕入先発注成形課編集フォームの「生産数量」コントロール(更新後処理)
呼び出し元 ユーザーによる生産数量入力確定時
発注数量(数量)を直接訂正した場合は分納残数・設定数量ともに連動しますが、生産数量だけを訂正した場合は分納残数のみが連動し、発注元の数量・設定数量は変わりません。元の仕入先発注データを保ったまま、成形課内部の生産計画数だけを柔軟に調整できる仕組みです。

なお、備考コントロールにも更新後処理としてM99共通.備考マクロが設置されており、入力テキストを半角に統一しています。

備考コントロールの更新後処理関連ページ

関連記事

フォームごとに同じ処理のマクロを個別に作ると、マクロの数が際限なく増えて管理が大変になります。M99共通マクロはどのフォームでも使い回せる処理をサブマクロとして一箇所に集約したものです。コントロール名を統一しておくことでフォームを問わず同じ[…]


編集更新ボタンのマクロ設計

編集内容を確定する編集更新ボタンは、確認ダイアログを経て単一の更新クエリでT31仕入先発注Mへ反映します。

サブマクロ:編集更新

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

マクロの概要

項目 内容
目的 編集内容をT31仕入先発注Mへ反映する
実行タイミング 編集更新ボタンクリック時
処理内容 確認ダイアログ→更新クエリ実行→完了メッセージ→フォームを閉じる→一覧を再クエリ

マクロの設置場所

項目 内容
格納先 F31仕入先発注成形課編集フォームの「編集更新」ボタン
呼び出し元 ユーザーによる編集更新ボタンクリック

Q31仕入先発注成形課編集更新 クエリデザインビュー

つづき

編集更新クエリ(Q31仕入先発注成形課編集更新)の構成

フィールド レコードの更新
発注日/仕入先コード/納期/数量/仕入先単価/備考/分納残数/分納回数/発注者コード/成形課/現品票区分/手配番号元/設定数量/更新者コード/納期設定/取消/取消日 [Forms]![F31仕入先発注成形課編集]![各コントロール](すべてコントロール名=フィールド名で参照)
抽出条件(手配番号) [Forms]![F31仕入先発注成形課編集]![手配番号]
受注編集ページの編集更新マクロには「取消するデータとして処理します」という取消専用の事前警告や、連動先テーブルを別クエリで更新する分岐がありました。仕入先発注編集では取消コントロール自体が取消日から自動算出される計算コントロールのため、通常の更新クエリがそのまま取消フラグ・取消日も一緒に書き込む形で完結しています。連動して取り消すべき先のデータも存在しないため、受注編集より一段シンプルな構成です。

現品票再発行・材料裁断カード再発行ボタンのマクロ設計

現品票・材料裁断カードの再発行は、いずれもプレビュー確認→印刷実行確認という2段階の確認ダイアログを経て印刷するマクロです。

サブマクロ:現品票再発行

サブマクロのテキスト表示
サブマクロ:現品票再発行
警告音
If MsgBox("現品票の再発行をプレビューで確認してから印刷してください。よろしいですか?",4+32,"確認")=6 Then
 レポートを開く (R31仕入先発注現品票再発行印刷, 印刷プレビュー, , , 標準)
 If MsgBox("現品票の再発行を印刷します。よろしいですか?",4+32,"確認")=6 Then
  レポートを開く (R31仕入先発注現品票再発行印刷, 印刷, , , 標準)
  メッセージボックス (現品票の再発行の印刷が完了しました。, はい, なし, 印刷完了)
  ウィンドウを閉じる (レポート, R31仕入先発注現品票再発行印刷, 確認)
  マクロの中止
 Else
  メッセージボックス (印刷を中止しました, はい, なし, 中止)
  ウィンドウを閉じる (レポート, R31仕入先発注現品票再発行印刷, 確認)
  マクロの中止
 If 文の最後
Else
 メッセージボックス (処理を中止しました, はい, なし, 中止)
 マクロの中止
If 文の最後
サブマクロの最後

マクロの概要

項目 内容
目的 数量変更などの理由で現品票を印刷プレビュー確認のうえ再発行する
実行タイミング 現品票再発行ボタンクリック時
処理内容 プレビュー確認→印刷実行確認→印刷→完了メッセージ→プレビューを閉じる

マクロの設置場所

項目 内容
格納先 F31仕入先発注成形課編集フォームの「現品票再発行」ボタン
呼び出し元 ユーザーによる現品票再発行ボタンクリック

材料裁断カード再発行ボタンのマクロも同一パターンで、対象がR31仕入先発注材料裁断カード再発行レポートに変わるだけです。


分納現品票発行・分納内職カード発行ボタンのマクロ設計

分割納品のたびに現品票・内職管理カードを発行できる機能です。発行のたびにテーブルへ一時保存し、印刷後は削除する使い切り設計になっています。

サブマクロ:分納現品票開く

サブマクロのテキスト表示
サブマクロ:分納現品票開く
フォームを開く(F31仕入先発注品票分納発行, フォーム ビュー, , , , 標準)
マクロの中止
サブマクロの最後

マクロの概要

項目 内容
目的 分納現品票発行ポップアップを開く
実行タイミング 分納現品票発行ボタンクリック時
処理内容 ポップアップを開くのみ

マクロの設置場所

項目 内容
格納先 F31仕入先発注成形課編集フォームの「分納現品票発行」ボタン
呼び出し元 ユーザーによる分納現品票発行ボタンクリック

仕入先発注品票分納発行ポップアップフォーム

分納現品票印刷ボタンを押すと分納数量と発行枚数を入力するポップアップフォームが開きます。

仕入先発注品票分納発行フォーム デザインビュー

分納現品票発行ポップアップ(F31仕入先発注品票分納発行)には、分納数量・発行枚数の2つの非連結コントロールと、印刷ボタン・閉じるボタンが配置されています。分納内職カード発行ポップアップ(F31仕入先発注内職カード分納発行)も同一構成です。

印刷ボタンのサブマクロ

分納数量と分納枚数の入力チェックを実行してプレビューを確認したうえで印刷が実行されます。

サブマクロ:分納現品票印刷

サブマクロのテキスト表示
サブマクロ:分納現品票印刷
If IsNull([分納数量]) Then
 メッセージボックス (分納数量を入力して下さい。, はい, 警告, エラー)
 コントロールの移動 (分納数量)
 マクロの中止
If 文の最後
If [Forms]![F31仕入先発注成形課編集]![分納残数]<[Forms]![F31仕入先発注品票分納発行]![分納数量] Then
 メッセージボックス (分納残数をオーバーしています。, はい, 警告, エラー)
 コントロールの移動 (分納数量)
 マクロの中止
If 文の最後
If IsNull([発行枚数]) Then
 メッセージボックス (発行枚数を入力して下さい。, はい, 警告, エラー)
 コントロールの移動 (発行枚数)
 マクロの中止
If 文の最後
警告音
If MsgBox("現品票の分納印刷してよろしいですか?",4+32,"確認")=6 Then
 マクロの実行 (M31仕入先発注成形.分納現品票追加, , =[Forms]![F31仕入先発注品票分納発行]![発行枚数], )
 レポートを開く (R31仕入先発注現品票分納発行印刷, 印刷, , , 標準)
 メッセージの設定 (いいえ)
 クエリを開く (Q31仕入先発注現品票分納削除, データシート, 編集)
 値の代入
  アイテム = [分納数量]
  式    = Null
 値の代入
  アイテム = [発行枚数]
  式    = Null
 コントロールの移動 (分納数量)
 マクロの中止
Else
 メッセージボックス (処理を中止します, はい, なし, )
 マクロの中止
If 文の最後
サブマクロの最後

マクロの概要

項目 内容
目的 分納数量・発行枚数を検証したうえで分納現品票を発行部数分印刷し、一時テーブルを空に戻す
実行タイミング 印刷ボタンクリック時
処理内容 分納数量Nullチェック→分納残数オーバーチェック→発行枚数Nullチェック→確認ダイアログ→追加マクロ実行→印刷→削除クエリでテーブルを空にする→コントロールをNull化

マクロの設置場所

項目 内容
格納先 F31仕入先発注品票分納発行フォームの「印刷」ボタン
呼び出し元 ユーザーによる印刷ボタンクリック

サブマクロ:分納現品票印刷内で実行されるサブマクロ

テーブル(T31仕入先発注分納現品票)に発行枚数分追加するマクロ。

サブマクロ:分納現品票追加

サブマクロのテキスト表示
サブマクロ:分納現品票追加
メッセージの設定 (いいえ)
クエリを開く (Q31仕入先発注現品票分納印刷追加, データシート, 編集)
サブマクロの最後

マクロの概要

項目 内容
目的 発行枚数分の分納数量レコードをT31仕入先発注分納現品票へ追加する
実行タイミング 分納現品票印刷マクロから連続実行
処理内容 追加クエリを実行してレコードを発行枚数分展開する

マクロの設置場所

項目 内容
格納先 M31仕入先発注成形マクロの「分納現品票追加」サブマクロ
呼び出し元 分納現品票印刷マクロからの呼び出し

Q31仕入先発注現品票分納印刷追加 クエリデザインビュー

分納現品票追加クエリ(Q31仕入先発注現品票分納印刷追加)の構成

フィールド 内容
手配番号 [Forms]![F31仕入先発注成形課編集]![手配番号]
分納数量 [Forms]![F31仕入先発注品票分納発行]![分納数量]
レコードの追加先 T31仕入先発注分納現品票

追加先のテーブルデザインビュー(T31仕入先発注分納現品票)

テーブルデザインビュー

テーブル構成

テーブル名 フィールド 用途
T31仕入先発注分納現品票 手配番号(短いテキスト)/分納数量(数値型) 分納現品票を発行する手配番号と発行する分納数量
T31仕入先発注分納内職カード 手配番号(短いテキスト)/分納数量(数値型) 分納内職カードを発行する手配番号と発行する分納数量

印刷後にサブマクロ内で実行される削除クエリ

分納現品票を印刷したあとに追加したデータをテーブルから削除してクリア状態にする。

Q31仕入先発注現品票分納削除 クエリデザインビュー

分納現品票削除クエリ(Q31仕入先発注現品票分納削除)は、T31仕入先発注分納現品票の全レコードを条件なしで削除する単純な削除クエリです。印刷完了後にテーブルを空にするために使われます。

なお、分納内職カード側の追加クエリ(Q31仕入先発注内職カード分納印刷追加)・削除クエリ(Q31仕入先発注内職カード分納削除)は、対象テーブルがT31仕入先発注分納内職カードに変わるだけで、構成は上記と完全に同一です。

印刷後にQ31仕入先発注現品票分納削除で一時テーブルを空にしておくことで、次回発行時に前回のデータが残って重複印刷されるのを防いでいます。使い切り型のテーブル設計です。

分納内職カード発行の「分納内職カード開く」「分納内職カード印刷」「分納内職カード追加」の各マクロも、対象フォーム・テーブル・レポートが内職カード用に変わるだけで、処理の流れは分納現品票と完全に同一です。


受入登録ボタン・閉じるボタン

受入登録ボタンは、メインメニューの受入登録ボタンと同じ機能をこの編集画面からも呼び出せるようにしたものです。詳細画面で発注内容を確認した流れでそのまま受入登録に進める導線ですが、受入登録自体の仕組みはメインメニュー側のページで解説します。

◆リンクカード:Access受入登録フォーム設計(URL未定)

閉じるボタンは、このフォームを閉じて元の照会画面に戻るだけの単純なボタンです。


まとめ

成形課仕入先発注編集ページは、詳細確認・訂正・取消という受注編集ページと同じ役割を担いながらも、成形課特有の「発注数量はそのままに生産数量だけを現場判断で調整する」という運用に合わせて、権限制御を持たず、取消も専用の警告分岐を持たない、よりシンプルな構成になっています。一方で作業日報・受入実績・同図番発注履歴という3つのサブフォームと、受入データをその場で訂正できるポップアップ、分納現品票・分納内職カードの発行機能まで備え、成形課の実務で必要な情報と操作を1画面に集約したページです。

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

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