VBA Access (Repetir una macro x cantidad de veces, bucle)

Espero puedan ayudarme con este tema:

Resulta que estoy trabajando con un formulario de access en el que, cada vez que me muevo por el formulario se ejecuta una macro, pero esto lo hago de manera manual y lo que necesitaría hacer es automatizar el procedimiento ya que es un formulario con más de 400 registros.

Quisiera crear un botón que al presionarlo se ejecute un código que realice este procedimiento que describí antes (recorra todos los registros del formulario, independientemente del número de registros, y al llegar al último se detenga, o bien vuelva al primer registro nuevamente).

¿Será posible hacer esto? No sé nada de VBA pero por lo que leí entiendo que se puede hacer algo tipo bucle o por el estilo.

2 Respuestas

Respuesta
2

Puedes hacerlo de muchas formas, por ejemplo:

For i=1 To Me.RecordsetClone.Recordcount-1
'Aquí tu macro/código
DoCmd.GoToRecord,, acNext
Next i

O

Set rst=Me.RecordsetClone
Do Until rst.EOF
'Aquí tu macro/código (si vas a modificar los datos de los registros pon antes un rst.Edit y después un rst.Update)
rst.MoveNext
Loop

O incluso, dependiendo de lo que quieras hacer, podrías llegar a hacerlo con una consulta de Actualización (del tipo UPDATE Tabla SET....) sin necesidad de recorrer los registros uno a uno.

Gracias Sveinbjorn El Rojo por tu respuesta, voy a probar y luego te cuento que tal fue.

En realidad lo que quiero es solamente que se dirija al siguiente registro, entiendo que con lo que me pasaste podría hacerlo... creo que no será necesaria colocar ninguna macro puesto que las macros que tengo (las hice con el asistente de macros no tienen código en principio) se ejecutan cada vez que me muevo de un registro al otro (dado que en el formulario que se abre, puse el siguiente código en Eventos del Formulario: al activar el registro)

Private Sub Form_Current()

DoCmd.RunMacro "Auxiliar_AMDMacro"
DoCmd.RunMacro "CalcularVacacionesMacro"
DoCmd.RunMacro "AuxDias1Macro"
DoCmd.RunMacro "AuxDias2Macro"
DoCmd.RunMacro "AuxDias3Macro"
DoCmd.RunMacro "AuxDias4Macro"
DoCmd.RunMacro "AuxDias5Macro"
DoCmd.RunMacro "SumaDiasTomadosMacro"
DoCmd.RunMacro "CtaCteProxAñoMacro"
DoCmd.RunMacro "VacacionesTotalesMacro"
End Sub

Te vuelvo a escribir cualquier duda que tenga!

Mil gracias!!

Saludos!

Una cosa, según la opción que uses para hacer el recorrido de los registros, el evento "al activar registro" se ejecutará o no.

Por tanto, mi recomendación sería que pusieras el código de ese evento "al activar registro" dentro de la opción que elijas, ya sea directamente o mediante una llamada a ese evento.

Respuesta
1

Le recomiendo en lo posible cambiar las macros por procedimientos, esto le permite mejor control del código. Ahora, ¿Qué pasa si las macros realizaran procesos de actualización de datos y se desplace al registro anterior y este ya fue procesado?. Tendríamos que controlar el desplazamiento del cursor. Este es un inconveniente cuando el origen de datos del formulario depende de una tabla o consulta, pero si trabajamos con formularios independientes tenemos todo el control, lógicamente hay que programar búsqueda, actualización, eliminación etc.

Por favor, tome mi comentario como una recomendación.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas