Ese error se muestra porque están intentando hacer una operación con un objeto recordset, por ejemplo: Sí intentas cerrarlo sin antes haber abierto dicho objeto.
Te recomiendo que uses el manejo de errores. Te dejo un ejemplo de código de VB6 con MS Access.
Public Function ExisteElUsuario(ByRef sUsuario As String, ByRef sContraseña As String) As Boolean
On Error GoTo Err_ExisteElUsuario
Dim oRst As Object
Dim sSQL As String
sProcName = "ExisteElUsuario"
ExisteElUsuario = False
'RUTINA PARA EVITAR INYECCIONES DE CODIGO sSQL
sUsuario = Replace(Replace(Replace(Trim(sUsuario), "'", ""), "*", ""), "=", "")
sContraseña = Replace(Replace(Replace(Trim(sContraseña), "'", ""), "*", ""), "=", "")
Set oRst = CreateObject("ADODB.Recordset")
sSQL = "SELECT * FROM TBL_USUARIOS WHERE USU_USU='" & sUsuario & "' AND USU_CON='" & sContraseña & "';"
oRst.Open sSQL, SvrCnx, adOpenDynamic, adLockOptimistic
If oRst.BOF And oRst.EOF Then
ExisteElUsuario = False
MsgBox "Nombre de Usuario o Contraseña incorrectos.", vbInformation, sAppTitle
Else
IdUser = Trim(oRst.FIELDS("usu_ide"))
Usuario = Trim(oRst.FIELDS("usu_usu"))
Password = Trim(oRst.FIELDS("usu_con"))
NivelUser = CInt(Trim(oRst.FIELDS("usu_per_ide")))
sFullName = Trim(oRst.FIELDS("usu_nom")) & " " & Trim(oRst.FIELDS("usu_ape"))
UserStatus = oRst.FIELDS("usu_hab")
ExisteElUsuario = True
End If
If oRst.State <> 0 Then oRst.Close
Set oRst = Nothing
Exit_ExisteElUsuario:
Exit Function
Err_ExisteElUsuario:
MsgBox Err.Number & " - " & Err.Description, vbCritical
Resume Exit_ExisteElUsuario
End Function