Kleine Ergänzung "CursorLocation".
Ganz einfach:
rs.CursorLocation = adUseClient
rs.Open ...

rs.RecordCount enthält dann die Anzahl geladener Sätze.