日付・店舗番号・利用者番号を入力するメインフォームと、製品番号・数量を入力するサブフォームがあります。
売上情報を入力するフォームにメニューに戻るボタンがあり、入力必須項目が未入力の状態でメニューに戻るボタンを押したら入力内容を破棄してもよいかの確認メッセージを表示し、OKを押すとレコードをデータ保存用のテーブルに書き込まずにメニューに戻るようにしたい
メインフォーム側で上記の処理を行ないたいのであれば、例えばメインフォームのフォームモジュールに次のようなコードを記述なさればよろしいのではないかと。
vba
1Option Compare Database
2Option Explicit
3
4'フォームの[レコード移動時]イベント
5Private Sub Form_Current()
6
7 '[売上日付]にフォーカスを移す
8 Me![売上日付].SetFocus
9
10 'カレントレコードが新規レコードである場合
11 If Me.NewRecord = True Then
12 'サブフォームコントロールの[編集ロック]プロパティを「はい」に
13 Me![売上明細サブフォーム].Locked = True
14 Else
15 'サブフォームコントロールの[編集ロック]プロパティを「いいえ」に
16 Me![売上明細サブフォーム].Locked = False
17 End If
18
19End Sub
20
21'フォームの[更新前処理]イベント
22Private Sub Form_BeforeUpdate(Cancel As Integer)
23
24 With Me
25
26 '[売上日付]の値が日時データとして扱えない値である場合
27 If IsDate(![売上日付].Value) = False Then
28 'このイベントをキャンセルする
29 Cancel = True
30 '警告メッセージの表示
31 MsgBox "売上日付を入力して下さい!", vbExclamation, "入力エラー"
32 '[売上日付]にフォーカスを移す
33 ![売上日付].SetFocus
34 'プロシージャを抜ける
35 Exit Sub
36 End If
37
38 '[店舗番号]の値が Null または空文字列である場合
39 If Nz(![店舗番号].Value, "") = "" Then
40 'このイベントをキャンセルする
41 Cancel = True
42 '警告メッセージの表示
43 MsgBox "店舗番号を入力して下さい!", vbExclamation, "入力エラー"
44 '[店舗番号]にフォーカスを移す
45 ![店舗番号].SetFocus
46 'プロシージャを抜ける
47 Exit Sub
48 End If
49
50 '[利用者番号]の値が Null または空文字列である場合
51 If Nz(![利用者番号].Value, "") = "" Then
52 'このイベントをキャンセルする
53 Cancel = True
54 '警告メッセージの表示
55 MsgBox "利用者番号を入力して下さい!", vbExclamation, "入力エラー"
56 '[利用者番号]にフォーカスを移す
57 ![利用者番号].SetFocus
58 'プロシージャを抜ける
59 Exit Sub
60 End If
61
62 End With
63
64End Sub
65
66'フォームの[更新後処理]イベント
67Private Sub Form_AfterUpdate()
68
69 'サブフォームコントロールの[編集ロック]プロパティを「いいえ」に
70 Me![売上明細サブフォーム].Locked = False
71
72End Sub
73
74'コマンドボタン[メニューに戻るコマンド]の[クリック時]イベント
75Private Sub メニューに戻るコマンド_Click()
76
77 'カレントレコードが編集中ではない場合
78 If Me.Dirty = False Then
79 'このフォームを閉じる
80 DoCmd.Close acForm, Me.Name, acSaveNo
81 'プロシージャを抜ける
82 Exit Sub
83 End If
84
85 Dim lngAnswer As Long
86
87 '確認ダイアログを表示し、[OK]ボタンと[キャンセル]ボタンのどちらがクリックされたかを取得
88 lngAnswer = MsgBox("カレントレコードの編集内容を破棄してフォームを閉じますか?", _
89 vbQuestion + vbOKCancel + vbDefaultButton2, _
90 "カレントレコードの編集中です")
91
92 '[キャンセル]ボタンがクリックされた場合
93 If lngAnswer = vbCancel Then
94 Exit Sub
95 End If
96
97 'カレントレコードに対する変更を取り消す
98 Me.Undo
99 'このフォームを閉じる
100 DoCmd.Close acForm, Me.Name, acSaveNo
101
102End Sub
各コントロールの名前は適当に書き換えて下さい。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。