使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
やっと、ご希望のことの全容がほぼつかめました。
まず、質問のコードはまったく無意味なコードですので、捨てましょう。
あと、その入力フォームが連結か非連結がまだ不明ですが、連結にした方がコードがシンプルになりますので、連結にしましょう。
フォームのレコードソースにテーブル名を設定して、各テキストボックスのコントロールソースにフィールド名を設定しておきます。
ただし、実施日、受付No 入力用のテキストボックスは非連結にしておきます。これはデータ入力用でなく、データ検索用の役割を持たせますので。また、検索用だということをユーザーに分かり安くするために、フォームヘッダーに配置するといいでしょう。このテキストボックスの名前を「txt実施日」「txt受付No」とします。
フォームのプロパティは下記のように設定しておきます。
データ入力用 はい
フィルターの使用 いいえ
これでフォームを開いたとき、新規データ入力用として開きます。
「txt受付No」の入力規則は削除して起きて、更新後処理に下記のイベントプロシージャを設定します。
Private Sub txt受付No_AfterUpdate()
Dim strFilter As String
strFilter = "実施日=#" & Me.txt実施日 & "# AND 受付No=" & Me.txt受付No]
If DCount("受付No","アンケートデータ",)=0 Then
Me.実施日.Value = Me.txt実施日
Me.受付No.Value = Me.txt受付No
Else
Me.Filter = strFilter
Me.FilterOn = true
Me.DataEntry = False
End If
End Sub
これで、「txt実施日」「txt受付No」を入力してEnterキーを押せば、
該当レコードがなければ、新規レコード登録、あれば、該当レコードが表示されて更新できるようになります。
あとは、もう少しユーザーインターフェイスを工夫して入力しやすくしたり、入力ミスを防ぐようにするといいでしょう。
「txt実施日」「txt受付No」が入力されるまでは、他のコントロールは入力不可にしておくとか、
「txt受付No」は、コンボボックスにしておいて、リストを「txt実施日」で絞り込んだものにしておくとか、すると登録済みのデータの再入力はリストから選択するだけですみます。
"次へ"コマンドボタンのイベントプロシージャは下記のコードで登録後、新規レコードへ移動します。
DoCmd.GoToRecord , , acNewRec
Me.DataEntry = True
Me.txt受付No = Null