Supongamos que tenemos una tabla como la de la figura, con todos los campos rellenos menos el de "Consecutivo",
'Dimensionamos las variables
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim factura As String
'Creamos RecordSet
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("Select * from Facturas")
'Inicializamos variables
contador = 1
'Actualizamos el campo Consecutivo de la tabla Facturas
rst.MoveFirst
Do Until rst.EOF
'Si coinciden los campos Proveedor y factura con el del registro anterior, sumamos una unidad al contador
If rst!Proveedor = Proveedor And rst!factura = factura Then
contador = contador + 1
Else
'En caso contrario, reiniciamos el contador
contador = 1
End If
'Guardamos los valores del registro actual para compararlos con los del próximo registro
Proveedor = rst!Proveedor
factura = rst!factura
'Actualizamos el campo Consecutivo de la tabla
rst.Edit
rst!Consecutivo = contador
rst.Update
rst.MoveNext
Loop
'Mostramos un mensaje de fin de la operación
MsgBox "Operación realizada con éxito"
End Sub
En caso de coincidir los campos "Proveedor" y "Factura" con los del registro anterior, la numeración será secuencial. En caso contrario, restablecemos el índice y volvemos a comenzar desde 1.
Finalmente, la tabla queda de la siguiente manera,
Espero que este ejemplo te ayude a numerar con criterios los registros de una tabla que hayas creado en Microsoft Access de una manera sencilla.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Hasta la próxima.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
4 Comentarios
Enviar un comentario
Últimas publicaciones
Hola buenas tardes, me podrías ayudar? Intento hacer esa autonumeración en un campo de RECIBOS, pero que esta autonumeración no avance si se selecciona "SI" en el campo REQUIERE FACTURA. Se puede? Muchos saludos!
Hola Claudia,
Claro que se puede! Sólo tienes que completar las condiciones del recordset con la cláusula WHERE,
Set rst = dbs.OpenRecordset("Select * from Facturas where Requierefactura=False")
De esta manera, solo seleccionas los registros que cumplan los requisitos para ser numerados.
Si tienes cualquier duda, abre un hilo en el foro, sube el programa y lo miramos.
Saludos.
Hola,
¿Qué pasa si el campo proveedor no esta ordenado alfabeticamente? existe alguna manera de que encuentre el último id de ese proveedor y lo actualice de manera secuencial
Hola Diego,
Tendrías que crear un lazo interno que volviese a recorrer todos los registros buscando la última id para ese proveedor y factura. Este método no sería muy eficiente porque, dependiendo del número de registros, puede llegar a ralentizar bastante el proceso.
Si es tu caso, te aconsejaría ordenar previamente la tabla según los criterios a utilizar para realizar la numeración y posteriormente hacerlo tal cual lo tienes en el ejemplo.
Saludos.