Vba 关闭打开的记录集会产生运行时错误

Vba 关闭打开的记录集会产生运行时错误,vba,excel,database-connection,Vba,Excel,Database Connection,我有一个ADO记录集变量,它在userform的类模块中声明。记录集在窗体的激活事件中打开,我试图在窗体的终止事件中关闭它,代码如下: Private Sub UserForm_Terminate() If VersionIsReleased Then ThisWorkbook.Parent.Quit Else If Not m_rs Is Nothing Then If m_rs.State = adStateOpen Then m

我有一个ADO记录集变量,它在userform的类模块中声明。记录集在窗体的激活事件中打开,我试图在窗体的终止事件中关闭它,代码如下:

Private Sub UserForm_Terminate()

If VersionIsReleased Then
    ThisWorkbook.Parent.Quit
Else

    If Not m_rs Is Nothing Then

        If m_rs.State = adStateOpen Then
            m_rs.Close
        End If

        Set m_rs = Nothing
    End If

    Close_CN g_cn
    ThisWorkbook.Application.Visible = True
End If

End Sub

m_rs.Close
产生运行时错误:“在此上下文中不允许操作。”。知道为什么会发生这种情况吗?

如果您试图关闭记录集时正在编辑该记录集,则可能会发生此错误。如果使用
AddNew
或更改任何
字段().Value
,请确保在关闭前使用
Update
保存编辑。您可以检查
EditMode
属性,查看记录集处于何种状态。

我想知道在运行终止事件时变量是否已被销毁?此外,也许您不需要显式终止它,因为根据Microsoft-请参见-变量将超出范围(因此将被销毁)当用户表单作为一般性注释从内存中卸载时,您希望避免Finalizers/Deconstructor/exit处理程序中出现任何运行时错误。在这种情况下,我会在下一行加上Error Resume作为第一行。@Philip:要到达那一行,变量不能被销毁,因为它的状态是adStateOpen。我想我可以让Excel在卸载userform时销毁它,但这不会导致内存问题吗?关闭前EditMode属性的值是多少?可能您已经更新了一个字段,但没有执行.Update方法。