Fijate con esto:
Public Function CreateDisconnectRecordset(ByVal objRecordset As Recordset) As Recordset
Dim objDisconnect As Recordset, objColumn As Field
If objRecordset.State = adStateOpen Then
With objRecordset
Set objDisconnect = New Recordset
For Each objColumn In .Fields
objDisconnect.Fields.Append objColumn.Name, objColumn.Type, objColumn.DefinedSize, adFldIsNullable + adFldMayBeNull
objDisconnect.Fields.Item(objColumn.Name).NumericScale = objColumn.NumericScale
objDisconnect.Fields.Item(objColumn.Name).Precision = objColumn.Precision
Next
objDisconnect.Open
If Not .EOF Then
If .CursorType <> adOpenForwardOnly Then .MoveFirst
While Not .EOF
objDisconnect.AddNew
For Each objColumn In objDisconnect.Fields
objDisconnect.Fields.Item(objColumn.Name).Value = .Fields.Item(objColumn.Name).Value
Next
.MoveNext
Wend
End If
If Not objDisconnect.BOF And Not objDisconnect.EOF Then objDisconnect.MoveFirst
End With
End If
Set CreateDisconnectRecordset = objDisconnect
End Function