新規レコードかどうかはNewRecordプロパティで分かります、新規の場合はTrue、その他の場合はFalseになります。登録をキャンセルするには、フォームの更新前処理イベントの引数のCancelをTrueに設定します。
フォームを作成し更新前処理イベントを設定する
下の商品コード・商品名・単価を登録するフォームを作成しました。
フォームをデザインビューで開き、プロパティシートを開きます。
選択の種類で「フォーム」にし、イベントタブの「更新前処理」で[イベントプロシージャ]を選択し、右の[…]ボタンをクリックします。
新規レコードを判定するVBAの作成
VBE画面が開き、Form_BeforeUpdateのプロシージャが表示されるので、下記のVBAを入力します。
・If Me.NewRecord Thenで新規レコードの場合の処理を行います。
・MsgBoxの引数「vbOKCancel + vbCritical」で、[OK][キャンセル]ボタンと警告アイコンを表示します。
・[キャンセル]ボタンが押された場合は、Form_BeforeUpdateの引数のCancelをTrueにします。
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim lret As Long
If Me.NewRecord Then
lret = MsgBox("新規レコードを登録しようとしています。間違いないですか?", _
vbOKCancel + vbCritical, "製品登録")
If lret = vbCancel Then
Cancel = True
End If
End If
End Sub
実行画面です。
新規レコードを登録しようとすると、メッセージが表示され[OK]を押すと登録され、[キャンセル]を押すと入力画面に戻ります。
NewRecordプロパティは読み取り専用の為、Falseに設定することはできません。
ですのでNewRecordがTrueの状態で、登録しないでフォームを閉じようとするとメッセージが表示されてしまいます。
このメッセージを表示させたくない場合は、データが入力されていなければ、このレコードを削除するなどの処理が必要になります。