質問: AccessのフォームおよびVBAについて質問です。
回答: まず、品番が数値型か文字列型かで処理が変わります。 次に処理の順番が間違っています。 >Set rst = CurrentDb.OpenRecordset("在庫管理", dbOpenTable) は最終確認の後で、追加処理後は速やかに閉じなければいけません。 また処理後は、必要なら品番、部品名、価格をクリアして次の入力に備えて品番にフォーカスを当てます。 連続入力の場合はクリアではなく次の品番を設定します。 ちゃんとしたAccessの入力フォームのVBAは8割以上チェックだったりします。 【 品番が数値型の場合 】 Private Sub 追加_Click() '未入力エラー処理 If IsNull(Me.品番) = True Then MsgBox "品番が入力されていません!", vbCritical, "未入力エラー" Me.品番.SetFocus Exit Sub End If ' If IsNull(Me.部品名) = True Then MsgBox "部品名が入力されていません!", vbCritical, "未入力エラー" Me.部品名.SetFocus Exit Sub End If ' If IsNull(Me.価格) = True Then MsgBox "価格が入力されていません!", vbCritical, "未入力エラー" Me.価格.SetFocus Exit Sub End If '数値チェック If IsNumeric(Me.品番.Value) = False Then MsgBox "品番は数値です", vbCritical, "品番エラー" Me.品番.SetFocus Exit Sub End If ' If IsNumeric(Me.価格.Value) = False Then MsgBox "価格は数値です!", vbCritical, "価格エラー" Me.価格.SetFocus Exit Sub End If '重複チェック If Not IsNull(DLookup("品番", "在庫管理", "品番=" & Me.品番.Value)) Then MsgBox "既に品番があります!", vbCritical, "重複エラー" Me.品番.SetFocus Exit Sub Me.品番.SetFocus Exit Sub End If '最終確認 If MsgBox("登録を行います。よろしいですか?", vbQuestion + vbYesNo, "登録の確認") <> vbYes Then Me.追加.SetFocus Exit Sub End If '登録処理 Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("在庫管理", dbOpenTable) With rst .AddNew .Fields("品番") = Me!品番 .Fields("部品名") = Me!部品名 .Fields("価格") = Me!価格 .Update .Close End With '次に備える(必要なら) 品番.Value = Null 部品名.Value = Null 価格.Value = Null 品番.SetFocus End Sub 【 品番が文字列型の場合 】 Private Sub 追加_Click() '未入力エラー処理 If IsNull(Me.品番) = True Then MsgBox "品番が入力されていません!", vbCritical, "未入力エラー" Me.品番.SetFocus Exit Sub End If ' If IsNull(Me.部品名) = True Then MsgBox "部品名が入力されていません!", vbCritical, "未入力エラー" Me.部品名.SetFocus Exit Sub End If ' If IsNull(Me.価格) = True Then MsgBox "価格が入力されていません!", vbCritical, "未入力エラー" Me.価格.SetFocus Exit Sub End If '数値チェック If IsNumeric(Me.価格.Value) = False Then MsgBox "価格は数値です!", vbCritical, "価格エラー" Me.価格.SetFocus Exit Sub End If '重複チェック If Not IsNull(DLookup("品番", "在庫管理", "品番='" & Me.品番.Value & "'")) Then MsgBox "既に品番があります!", vbCritical, "重複エラー" Me.品番.SetFocus Exit Sub Me.品番.SetFocus Exit Sub End If '最終確認 If MsgBox("登録を行います。よろしいですか?", vbQuestion + vbYesNo, "登録の確認") <> vbYes Then Me.追加.SetFocus Exit Sub End If '登録処理 Dim rst As DAO.Recordset Set rst = CurrentDb.OpenRecordset("在庫管理", dbOpenTable) With rst .AddNew .Fields("品番") = Me!品番 .Fields("部品名") = Me!部品名 .Fields("価格") = Me!価格 .Update .Close End With '次に備える 品番.Value = Null 部品名.Value = Null 価格.Value = Null 品番.SetFocus End Sub