si quieres evitar el bucle puedes hacerlo mediante el PropertyBag, y te podría quedar algo así:
Cita: Private Function CopyRecordset(rsSource As ADODB.Recordset) As ADODB.Recordset
Dim rs As ADODB.Recordset
Dim pb As New PropertyBag
' creamos la copia del recordset
pb.WriteProperty "rs", rsSource
Set rs = pb.ReadProperty("rs")
Set pb = Nothing
'regresamos el recordset copiado
Set CopyRecordset = rs
End Function
ahora que si quieres aplicar filtros, etc puedes checar éste ejemplo
http://www.devx.com/vb2themax/Tip/18431
Salu2