Ejecutar código VBA al abrir una Base de Datos

En un formulario asociado a una tabla llamada "alumnos", en el evento Form_Current tengo introducido varios códigos que se ejecutan al abrir el registro, y necesito que una parte de ese código se ejecute automáticamente al abrir la base de datos aunque no abra este formulario.

El código concreto es el siguiente:

If Date >= Me.fechacambio And Me.grupocambio <> "" Then
Me.grupo = Me.grupocambio
Me.grupocambio = ""
Me.fechacambio = ""
End If

1 respuesta

Respuesta
1

Deberías explicar mejor lo que pretendes hacer, porque, tal como lo planteas, no tiene ningún sentido.

Me explico: el código que pretendes ejecutar al abrir la bases de datos, depende directamente de un formulario (cuando pones en código Me. Xxxx, estás haciendo referencia a un control del formulario donde programas ese código). Además, para que el código funcione, el formulario tiene que estar abierto, si no, el código te dará error.

Para hacer referencia a un control de un formulario desde un módulo independiente o desde el módulo de otro formulario, debes indicar a qué formulario te refieres (en vez de Me.), por ejemplo Forms("NombreFormulario"). Xxxxx o Forms! NombreFormulario. Xxxxx o cualquier otra sintaxis válida. Pero aún así, el formulario tiene que estar abierto para que se pueda acceder al valor del control indicado.

Perdón si no me he explicado. 

El código que he puesto efectivamente está insertado en un formulario. Lo que necesito hacer es que ese código se aplique automáticamente sobre la los registros de la tabla asociada a ese formulario al abrir la base de datos. El problema es que no se como crear un módulo que me aplique esta función y adaptar el código del formulario al módulo independiente. 

Básicamente el módulo que necesito configurar y aplicar al abrir la base de datos tiene que hacer lo siguiente: 

En la tabla alumnos, comparar la fecha actual con el campo "fechacambio" si es igual o mayor a éste y además el campo "grupocambio" no está vacío, cambiar el campo "grupo" = "grupocambio", para seguidamente borrar el campo "grupocambio" y "fechacambio". 

Espero haberme explicado mejor. Muchas gracias. 

Ahora sí me queda claro lo que quieres hacer:

1º/ Añades un módulo independiente a tu BD

2º/ Creas una función como esta (supondré que la tabla se llama TDatos, los campos FechaCambio, GrupoCambio y Grupo):

Public Function fncAlIniciar()
CurrentDb.Execute "UPDATE TDatos SET FechaCambio=Null, Grupo=GrupoCambio, GrupoCambio=Null WHERE Nz(GrupoCambio,'')<>'' AND FechaCambio<=#" & Format(Date,"mm/dd/yyyy") & "#"
End Function

Y guardas el módulo

3º/ A continuación creas una macro, sin asociarla a nada, y como acción de macro eliges "EjecutarCódigo". En los argumentos de la acción de macro, en nombre de la función pones el nombre de la función creada en el paso 2: fncAlIniciar. Guardas la Macro y la renombras a "AutoExec"

4º/ Y listo al abrir la BD se te ejecutará la macro, que llamará a la función y te actualizará los registros de la tabla que cumplan las condiciones.

En cualquier caso, por si la SQL necesita algún ajuste, has la prueba sobre una copia de tu BD

Te dejo un ejemplo para que hagas pruebas: http://www.filebig.net/files/AjpFTpdEgS 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas