Bueno, en mi experiencia, rs.Close falla cuando no tienes resultados en el objeto, o cuando hubo un error de bases de datos, entonces, bueno, la estructura correcta para correr esta clase de cosas, es asi:
Cita: on error resume next
set rs = conn.Execute(sql)
if conn.Errors.Count = 0 then
if not rs.eof then
//Operaciones con el rs
//Cerrar el rs porque sabemos que tiene datos y esta correctamente abierto
rs.Close
else
//Rs vacio
end if
else
//Error en la consulta
end if
//liberar memoria
set rs = nothing
conn.close
set conn = nothing
Con esa estructura no deberías de tener ningun problema con los objetos, etc., si te fijas el rs.close correra solamente cuando realmente debe correr.
Suerte!!