ソリューションアクセス入力フォーム
ソリューションがしようとするとエラーを捕捉しますが追加新規レコードのコマンドボタンの一部として自分自身をエラー処理をしないことだった。
Private Sub buttonNewRecord_Click()
Dim ErrorInt As Integer
Dim TeleCheck As Variant
Name.SetFocus
If Name.Text = "" Then
MsgBox "Name is missing!"
ErrorInt = ErrorInt + 1
End If
TeleCheck = DLookup("[Telephone]", "tblColdCallLog", "[Telephone] = '" & Me.Telephone & "'")
If Not IsNull(TeleCheck) Then
MsgBox "Telephone number already exists in the table!"
ErrorInt = ErrorInt + 1
End If
If ErrorInt < 1 Then
DoCmd.GoToRecord , , acNewRec
MsgBox "Record Added!"
End If
End Sub
オリジナルのポスト:私が持っているもの
:
私はCを持っていますテーブルにデータを入力するためのシンプルなAccess 2013フォームを改訂しました。フォーム上で、ユーザーはフィールドにデータを入力し、コマンドボタンウィザードを使用して新規レコードを追加するボタンをクリックします。
フォームには、[名前]と[インデックス:はい(重複なし)]、[電話番号]の1つの必須フィールドがあります。フォームでは、[Name]フィールドが空であるか、テーブルにある[Telephone]フィールドに重複番号が検出された場合、エラーメッセージが正しく出力されます。
は私がやろうとしてる何:
表示されるエラーメッセージは、ユーザーフレンドリーではありません。私はカスタムエラーメッセージでそれらを置き換えたいと思います。エラーがなければ、おそらくすべてがうまくいったというメッセージでしょう。フォームのプロパティで
を、[イベント]タブを、「エラーオン」で、[イベントプロシージャ]:私が試したものを
Private Sub Error_Sub(DataErr As Integer, Response As Integer)
If DataErr = 3022 Then
MsgBox "Duplicate telephone number found in table!"
Response = acDataErrContinue
End If
If DataErr = 3314 Then
MsgBox "Name is missing!"
Response = acDataErrContinue
End If
End Sub
これは動作しますが、フォームを閉じるときにのみ... '新しいレコードの追加'コマンドボタンをクリックすると、必要に応じてデフォルトのエラーメッセージが表示されます。
"Before Update"イベントを使用する必要がありますか?私は同じVBAスクリプトを使用することはできません。 DataErrまたはResponseを定義することは許可されていません。だから、代わりに式を使用します:
=IIf(Error(3022),MsgBox("Duplicate telephone number found in table"))
=IIf(Error(3314),MsgBox("Name is missing"))
これは動作しますが、エラーがないときに機能します。 [Name]フィールドに名前があっても、エラーが表示されますが、少なくともデフォルトのエラーメッセージが置き換えられます。
ボタン自体に入れてみましょうか?私はそれを編集するためにマクロビルダを使用する必要があります。これは、これをコピーして貼り付けることが少し難しいので、私は簡素化されます:
OnError GoTo Error_Handling
GoToRecord New
If [MacroError]<>0 Then
MsgBox = "[MacroError].[Description]"
End If
Error_Handling:
If Error(3022) Then
MsgBox = "Duplicate telephone number found in table!"
End If
If Error(3314) Then
MsgBox = "Name is missing!"
End If
これは、イベント「アップデートの前に」と同じん。デフォルトのエラーメッセージを置き換えますが、最初にエラーメッセージをトリガするかどうかは関係ありません。
私は間違っていますか?私はそれが本当に簡単な何かの感覚を得る。私はさまざまな組み合わせと無限のグーグルを試みましたが、私は困惑しています。
レコードを追加するときは、ほとんどの場合、アンバウンドフォームを使用し、パラメータを指定して更新クエリを実行する前に、必要な各コントロール(フィールド)をチェックします。これはスケーラブルです。 – Fionnuala
最良の選択肢は入力エラーを防ぐことです。フォームのBeforeUpdateイベントで、または可能であれば、個々のコントロールのBeforeUpdateイベントまたはAfterUpdateイベントで行います。次に、フォームのエラー処理で、他のエラー(通常はユーザーコントロールからのエラー)が処理されるようにします。 – Gustav
ありがとうございます。グスタフが私を正しい軌道に乗せた。エラーをキャプチャするのではなく、[新しいレコードを追加]ボタンの一部としてエラー処理を記述しました。ソリューションはOPに追加されました。 – ETP