2017-05-19 2 views
0

このフィールドは、BeforeUpdateコードを使用して特定のフィールドが入力されているかどうかを確認します。これらのフィールドは必須で、記入する必要があります。レコードを保存しないでください。他のフィールドがIDとスタッフフィールドなしで入力されている場合、メッセージボックスにポップアップが表示されます(必須フィールドなど)。次のようにフォームを終了する前にアクセスする必要のあるフィールド

Private Sub Form_BeforeUpdate(Cancel As Integer) 

If Nz([ID], "") = "" Then 
    MsgBox "The ID field is required.", vbExclamation, "Required Field" 
    Cancel = True 
End If 
If Nz([Staff], "") = "" Then 
    MsgBox "Staff field is required.", vbExclamation, "Required Field" 
    Cancel = True 
    Me.[Staff].SetFocus 
End Sub 

私は、「フォームを閉じる」ボタンがあります。このボタンをクリックすると

Private Sub CmdCloseForm_Click() 
    DoCmd.Close , "" 
End Sub 

は、私はフィールドが満たされていないという警告が出たが、その後、フォームが閉じます。私はYes/Noメッセージボックスに、フォームを閉じたいかどうかをユーザーに確認するように求めます。 BeforeUpdateサブフォームにYes/Noメッセージボックスを作成しました。ただし、サブCmdCloseFormは停止しません。

メッセージボックスを作成してフォームを終了するかどうかを確認する方法はありますか?例えば

If MsgBox("Would you like to close the form still? Changes won't be saved.", vbYesNo + vbQuestion, "Warning") = vbNo Then 
    Exit Sub 
End If 

私はCmdCloseForm関数に上記のMsgBoxを入れた場合、それは彼らがID /スタッフフィールドが欠落していることを知らせる前にユーザーに要求します。

+0

おそらく、ボタンのクリックイベントでデータの検証を行う必要があります。 – June7

答えて

0

連続したポップアップを表示したいので、自動更新を完全にキャンセルし、閉じるの検証をしてください。

検証に成功した場合は、ユーザーに通知しない場合はレコードを保存します。

Private Sub Form_BeforeUpdate(Cancel As Integer) 
    Cancel = True 'cancel auto-update 
End Sub 

'Validate and either Save or Close 
Private Sub CmdCloseForm_Click() 
    If Me.Dirty Then 
     If IsFormValidated Then 
      DoCmd.RunCommand acCmdSaveRecord 
     Else 
      If MsgBox("Would you like to close the form still? Changes won't be saved.", vbYesNo + vbQuestion, "Warning") = vbNo Then Exit Sub 
     End If 
    End If 
    DoCmd.Close acForm, Me.Name, acSavePrompt 
End Sub 

'Validation 
Private Function IsFormValidated() As Boolean 

    IsFormValidated = True 'assume all is in order 

    If Nz([ID], "") = "" Then 
     MsgBox "The ID field is required.", vbExclamation, "Required Field" 
     IsFormValidated = False 
    End If 

    If Nz([Staff], "") = "" Then 
     MsgBox "Staff field is required.", vbExclamation, "Required Field" 
     Me.[Staff].SetFocus 
     IsFormValidated = False 
    End If 
End Function 
+0

これに感謝します。私は同様のことを試してみましたが、Y/Nメッセージボックス(「あなたは閉じたいですか?」)と「スタッフのフィールドがありません」というリマインダが残っているという問題が残っていました。 "IDフィールドがありません。" メッセージボックスを次の順序で表示する方法が必要でした。1.スタッフフィールドがありません。 2. IDフィールドがありません。 3.このフォームを閉じたいのですか? – xpandamonium

+0

また、あなたが書いたことを試してみました。素晴らしいことですが、私は「あなたはこのフォームを閉じたいですか?」という方法を見つけようとしています。 msgbox last。 – xpandamonium

+0

更新された回答をご覧ください。 –

関連する問題