Ms access 访问VBA:对象无效或不再设置

Ms access 访问VBA:对象无效或不再设置,ms-access,vba,Ms Access,Vba,我得到以下错误: object invalid or no longer set 当我的代码运行以下字符串时: DoCmd.RunCommand acCmdDeleteRecord 据我所知,我得到这个错误是因为没有选择记录,或者选择的记录是Nothing 如何在执行代码之前添加检查?有这样的东西会很棒: If SelectedRecord != Nothing then DoCmd.RunCommand acCmdDeleteRecord End If 有多种方法可以做到这一点 最

我得到以下错误:

object invalid or no longer set
当我的代码运行以下字符串时:

DoCmd.RunCommand acCmdDeleteRecord
据我所知,我得到这个错误是因为没有选择记录,或者选择的记录是
Nothing

如何在执行代码之前添加检查?有这样的东西会很棒:

If SelectedRecord != Nothing then
   DoCmd.RunCommand acCmdDeleteRecord
End If

有多种方法可以做到这一点

最简单的方法就是打开控制向导,然后选择记录操作->删除记录。这将生成一个嵌入式宏。您可以直接使用它,或者将其用作所需步骤的参考

完全VBA解决方案如下所示:

Dim rs As Recordset: Set rs = Me.Recordset
With rs
    If Not rs.Updatable Then
        'RS is not updateable, delete will fail
        Exit Sub
    End If
    If Not .EOF And Not .BOF Then '0 records
        If Me.NewRecord Then
            If Not Me.Dirty Then
                'Do nothing, unchanged new record so won't be saved
            Else
                'Revert changes on new record
                Me.Undo
            End If
        Else
            .Delete
        End If
    End If
End With

请注意,我故意不使用
DoCmd.RunCommand acCmdDeleteRecord
。这是因为我希望能够指定删除记录的表单(例如子表单)。

我认为
如果不是.EOF和Not.BOF,那么可以将
更改为
If.updateable和Not.EOF和Not.BOF Then
以避免额外的
If
语句;另外,
如果不是Me.Dirty Then
更改为
如果是Me.Dirty Then
以省略对
Else
语句的需要。@LeeMac这当然是真的。我之所以包括这些步骤,是因为我经常在删除失败时使用描述性错误消息。然而,这段代码没有这些;我很难找到你代码的错误。:-)