Quiero que, al entrar en un formulario, se ejecute el código que hay tras un botón de comando existente en ese formulario.

En principio parece lo más sencillo del mundo pero se me resiste.

Ahora lo tengo resuelto entrando en el formulario -lo hace en el último registro que corresponda tras un previo filtrado- y haciendo clic sobre el botón de comando que ejecuta el código que pretendo se ejecute -perdón por la redundancia- simplemente al entrar en el formulario.

La entrada en el formulario se produce tras la ejecución de una macro bastante compleja -me manejo muchíííísimo mejor con las macros que con el código... ;'-( - en la que he pretendido añadir una Acción de 'Ejecutar Código' pero me pide el nombre de la Función... Ingenuamente he copiado, simplemente: a secas y a pelo, en un nuevo Módulo VBA de la aplicación el código correspondiente pero me da error... Supongo que porque para que la aplicación lo reconozca como Función debo hacer algo más que no sé hacer, obviamente.

Este es el código -el error salta en la primera línea o en la segunda... No recuerdo ahora-:

Dim Strqry As String
Strqry = "SELECT * FROM datos WHERE sector = '" & Me.sector & "' AND fila = '" & Me.fila & "' AND fosa_nicho = '" & Me.fosa_nicho & "' ORDER BY fecha_servicio DESC"
Set rs = CurrentDb.OpenRecordset(Strqry, dbOpenDynaset)
If Not rs.EOF Then
Me.propietario_actual = rs![propietario_actual]

Else
Me.propietario_actual = "No existe propietario para esta sepultura. Introduzca nuevos datos."
End If

rs.Close
DoCmd.GoToControl "Tipo_Servicio"

1 Respuesta

Respuesta
1

Imaginemos que tu botón se llama btnEjecutar, y tiene el código que quieres ejecutar asociado a su evento "Al hacer click".

En ese caso, en el evento "Al cargar" de tu formulario, le pones este código: btnEjecutar_Click

Y listo, al entrar al formulario se ejecutará el código asociado al botón.

Otra opción es que directamente copies el código del botón a ese evento.

Si tienes una macro asociada al botón (no sirve una macro incrustada), imagino que también podrías ejecutarla con esta linea de código:

DoCmd. RunMacro "NombreMacro"

Donde has de poner el nombre de tu macro.

Sveinbjorn El Rojo, hasta que le dé el nombre definitivo el Botón de Comando que ejecuto al hacer efectivamente como supones  clic sobre él, se llama Comando 21.

En vista de lo que me dices en la primera parte de tu respuesta he escrito en el evento 'Al cargar' del formulario en cuestión, como verás:

Private Sub Form_Load()
btnComando21_Click
End Sub

Pero me da error de compilación:

"No se ha definido Sub o Function" ¿¿??

Si se llama Comando21, tienes que poner ese nombre, no btnComando21:

Private Sub Form_Load()
Comando21_Click
End Sub

En esta ocasión no me da el error de compilación pero no lo ejecuta del mismo modo que haciendo clic efectivamente en el Comando 21 del formulario.

Por si acaso he asociado el código que me decías también al evento 'Al activar registro' pero sin el resultado deseado.

¿Qué te hace diferente? ¿O qué no te hace?

Por lo que veo, el código busca si existe un propietario del nicho en función de unos parámetros del formulario. Si el formulario se inicia en blanco, nunca se ejecutará bien la consulta...

El formulario no se abre en blanco, se abre con los datos de 'Sector', 'Fila' y 'Fosa/Nicho' que le ha ... transferido la macro que lo abre con acciones de 'Establecer valor' de un formulario de filtrado previo.

Ya digo: el Formulario se abre con los parámetros 'transferidos' desde el Formulario de filtrado de Sector, Fila y Fosa/Nicho, pero falla al no traerse el propietario/concesionario que en la BD consta lo es de la sepultura... Cosa que sí sucede al hacer clic en el botón de Comando21 del Formulario ya abierto.

Yo diría que, dentro de mi ignorancia confesa, es un problema de 'actualización en tiempo de ejecuición'... si es que ese concepto existe.

Inténtalo poniendo un retardo en la ejecución del código:

Private Sub Form_Load()

Me.TimerInterval=1000 '1 segundo

End Sub

Y en el evento "Al cronómetro"

Private Sub Form_Timer()

Comando21_Click

End Sub

¡Gracias! EXACTO!!!!... el nombre del propietario de la sepultura  : - (  tarda un poquillo pero finalmente aparece...

Se supone que bajando el retardo éste decrecerá... ¿Cómo lo hago?

En cualquier caso tema resuelto por supuesto, MUCHAS GRACIAS!!!

SVEINBJORN EL ROJO, eres un crack... QUÉ ENVIDIA!!!  ;' - (

Me.TimerInterval=1000 significa que espera un segundo para ejecutar el código de Form_Timer.

Si le pones: Me.TimerInterval=500 esperará medio segundo.

Prueba distintos valores hasta que des con el que más te convenga.

Sólo por agotar el tema: reduciendo el TimerInterval a 1 -1 milisegundo?, funciona perfectamente... con 0 no...

Gracias de nuevo SVEINBJORN.

Vaya! Una pequeña contrariedad!

El valor del 'Propietario actual' -de la sepultura- que el código se trae al formulario lo escribe en un cuadro combinado que puede modificarse por uno de los valores de la lista dependiente u otro cualquiera... 

El caso es que ahora, no...  ¿¿??

No te sigo. ¿Podrías explicar un poco más el problema? Si pones alguna imagen del formulario, e indicas de dónde coge los datos el cuadro combinado, mejor

Mañana sigo con el tema.

Ahora estoy fuera.

Vuelvo a la carga...

Veréis quizás más que largas explicaciones sea más efectivo decir lo que digo en este documento que he subido a MediaFire, espero que se pueda ver públicamente: 

http://www.mediafire.com/view/bx9s71kobbsb1om/Documento_para_%27TodoExpertos.doc 

Saludos.

Ajá!, ahora sí entendí el problema.

Prueba así:

Private Sub Form_Timer()

Comando21_Click

Me.TimerInterval=0

End Sub

Para anular la ejecución del evento una vez que se ejecuta el código del botón.

Otra alternativa podría ser esta, si usar el cronómetro:

Private Sub Form_Load()

Dim i as long

For i=1 To 1000

DoEvents

Next i

Comando21_Click

End Sub

Parece que haciendo trampas -no me convence la ortodoxia del modo...- he resuelto el tema... Simplemente haciendo que la macro 'compleja' que me abre el Formulario visite -Acción IrAControl- el Comando21 que tiene el código 'renuente', inmediatamente antes de ir al Control en el que quiero se me abra efectivamente el Formulario...
No sé... ¿¿??

Pues si te funciona ese método, no le des más vueltas...


Sveinbjorn, el problema es que soy un poco obsesivo-compulsivo...   ; -))))   :  esta noche he dormido en semi-vigilia dándole vueltas al tema. Procuraré olvidarme de él...  : - )

Gracias por todo.

¿Probaste las dos opciones que te dí hoy? Alguna te ha de funcionar. La del ciclo for, igual tienes que ajustar su duración, pero debería funcionar...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas