Per ottenere un recordset disconnesso devi crearlo sul Client.
E non devi chiuderlo o impostarlo a Nothing.
Aggiungi le istruzioni che ti ho inserito e prova.

codice:
Public Function RecordsetOpen(ByVal strSQL As String, ByVal strConnessione As String) As ADODB.Recordset 
dim DBConn As ADODB.Connection 
Dim rstTemp As ADODB.Recordset 

Set DBConn = New ADODB.Connection 
DBConn.Open strConnessione 

Set rstTemp = New ADODB.Recordset 
' ------------------------------------------------
  rstTemp.CursorLocation = adUseClient 
' ------------------------------------------------
rstTemp.Open strSQL, DBConn, adOpenDynamic, adLockOptimistic 

' ------------------------------------------------
' Effettua la disconnessione
' ------------------------------------------------
  Set rstTemp.ActiveConnection = Nothing
' ------------------------------------------------

' Con questa istruzione fai riferimento a rstTemp con 
' RecordsetOpen, se chiudi e annulli (vedi istruzioni
' con <-- No ...) tutto si ribalta su RecordsetOpen  
Set RecordsetOpen = rstTemp 

' rstTemp.Close <-- No 
' Set rstTemp = Nothing <-- Neanche  

DBConn.Close 
Set DBConn = Nothing 

end function
Ciao,