Recorrer una consulta/tabla y seleccionar los datos cada ciertos registros en Access VBA

Ante todo un cordial saludo.

Les escribo porque tengo una situación que me gustaría automatizar mediante VBA en ACCESS y es la siguiente:

Mediante una consulta se generan "n" cantidad de registros, los cuales se deben distribuir entre cierta cantidad de personas, lo que necesito es que me muestre una salida similar al siguiente ejemplo: supongamos que tengo 10 clientes y 3 personas a las cuales le voy a distribuir los clientes, entonces

A la persona 1 le corresponden el cliente 1, el cliente 4, el cliente 7 y el cliente 10.

A la persona 2 le corresponden el cliente 2, el cliente 5 y el cliente 8 y por último

A la persona 3 le corresponden el cliente 3, el cliente 6 y el cliente 9.

Tengo el siguiente código:

Dim db As DAO.Database

Dim rs As DAO.Recordset
Dim i As Integer
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * from Consulta2")
If rs.RecordCount = 0 Then Exit Sub
rs.MoveLast
rs.MoveFirst
For i = rs.RecordCount To 1 Step -9
 Debug.Print i & " " & rs.Fields("n") & " " & rs.Fields("Id de cadena") & " " & rs.Fields("Datos de cadena")
Next i
rs.Close
Set rs = Nothing
End Sub

Evidentemente estoy realizando mal el enfoque ya que no se como asociar el bucle con la consulta para que me muestre el resultado deseado.

Para la variable "i" realiza el procedimiento, pero de la consulta solo repite el primer valor. Como puedo asociar a la consulta el bucle en la variable "n" de la consulta2 que es un autonumérico creado.

1 Respuesta

Respuesta

Un recordset se recorre con Do Until - Loop o Do while - Loop. Pruebe con este código, aunque desconozco la Consulta2.

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim i As Integer
Set db = CurrentDb
Set rs = db.OpenRecordset("Select * from Consulta2")
If rs.RecordCount = 0 Then Exit Sub
Do Until rs.EOF
 Debug.Print i & " " & rs.Fields("n") & " " & rs.Fields("[Id de cadena]") & " " & rs.Fields("[Datos de cadena]")
 rs.MoveNext
Loop
rs.Close
Set rs = Nothing

gracias por su respuesta Sr.  Eduardo Pérez Fernández , pero ese procedimiento ya lo emplee, el detalle esta en que no solo se requiere recorrer la tabla/consulta sino seleccionar ciertos registros sistemáticamente.    Como coloque en el ejemplo dado:

Mediante una consulta se generan "n" cantidad de registros, los cuales se deben distribuir entre cierta cantidad de personas, lo que necesito es que me muestre una salida similar al siguiente ejemplo: supongamos que tengo 10 clientes y 3 personas a las cuales le voy a distribuir los clientes, entonces

A la persona 1 le corresponden el cliente 1, el cliente 4, el cliente 7 y el cliente 10.

A la persona 2 le corresponden el cliente 2, el cliente 5 y el cliente 8 y por último

A la persona 3 le corresponden el cliente 3, el cliente 6 y el cliente 9.

la consulta dos es un query de ejemplo y esta diseñada así: 

SELECT DCount("Consulta1.[Id de cadena]","[Consulta1]","Consulta1.[Id de cadena]<=" & CStr([Consulta1].[Id de cadena])) AS n, Consulta1.[Id de cadena], Consulta1.[Datos de cadena]
FROM Consulta1;

De antemano gracias por el apoyo.

El recorrido a realizar como lo platea el ejemplo va saltando de 3 en tres hasta llegar al final.

Luego haría otro procedimiento para la segunda persona que arrancaría en el penúltimo registro (For i = rs.RecordCount - 1 To 1 Step -3) y así sucesivamente hasta distribuir los "n" registros que contenga la consulta.

De antemano gracias por el apoyo.

Sin conocer la Consulta2 o sus tablas no es fácil acertar, sería conveniente subiera una imagen de sus tablas o el diseño de la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas