No me detuve mucho a analizar tu codigo por falta de tiempo, pero te sugiero que en lugar de utilizar una Subrutina, utilices una funcion y que te devuelva no un rs, sino un array mediante el metodo GetRows()
Código:
Function getcliente()
'toda la conexion y la apertura del recordset
if not rs.eof then
ds = rs.GetRows()
else
ds = null
end if
'cierra y destruye todos tus objetos
getcliente = ds
End Function
ds_cliente = getcliente()
if isArray(ds_cliente) then
'itera tu arreglo
else
'no hay datos
end if
Salu2,