Pulsar un botón de otro formulario con código en access

Pulsar un botón de otro formularioOs mostramos un pequeño truco para poder pulsar un botón de un formulario desde otro formulario diferente en Access, ésto puede resultar muy útil como podrás ver en el truco.

Para poder pulsar un botón de un formulario desde otro formulario tenemos que declarar el Sub como Public del botón que queremos pulsar.
Vamos a verlo con un ejemplo, supongamos que tememos un formulario A con un botón que actualiza los datos de una lista incrustada en el mismo formulario y por otro lado tenemos un formulario B, y queremos que al cerrar el formulario B se pulse el botón «cmdActualizar» del formulario A para que se actualicen los datos de la lista mencionada.
Bien, pues para ello, lo primero que haremos será poner como público el Sub del botón en cuestión que tenemos en el formulario A:

Public Sub cmdActualizar_Click()
me.Lista.requery
End Sub

Luego solo tenemos que llamar a ésta Sub desde el evento «Al cerrar» del formulario B tal que así:

Private Sub Form_Close()
If currentProject.AllForms(formularioA).IsLoaded Then
Form_formularioA.cmdActualizar_Click
End If
End Sub

Como se puede ver hemos colocado una condición, que si el formulario A está abierto entonces pulsamos el botón, de ésta manera nos aseguramos de que no se produzcan errores en caso de tener el formulario A cerrado por cualquier motivo.
Como siempre dejamos los comentarios abiertos para cualquier duda que tengáis.

Publicaciones relacionadas

11 comentarios en «Pulsar un botón de otro formulario con código en access»

  1. Pulsar un botón de otro formulario con código en access

    buena tengo un formulario principal el cual tiene un boton que me confecciona un mail con los datos del formulario, y a su ves dentro de este formulario tengo un subformulario que posee otro boton que manda la informacion del menu principal por Winsock texto plano. hasta hay todo bien funciona por separado (ahora lo que quiero es con un solo boton hacer las dos cosas al mismo tiempo)
    desde ya muchas gracias por su tiempo
    PD: siempre me da falla en tiempo de ejecucion…

    Responder
  2. Recordset

    Hola Tronico gracias por responder.
    Mi problema es precisamente ese , mi problema es poder grabar el dato directamente en la tabla. La macro o el codigo convertido los puedo ejecutar desde el formulario principal A, y me graban sin problema alguno en la tabla . Lo que no consigo es que lo haga desde el formulario B.
    Paso a explicarte:
    Cada paciente tiene un registro en una tabla. En el formulario que muestra la informacion de cada paciente hay insertado un subformulario que muestra todos los turnos programados de ese paciente con fecha, hora y ….
    Hasta ahi todo bien, puedo ver individualmente en cada registro todos los dias que concurrio y los dias que resta atenderse en formato «Vista hoja de datos»(en el subformulario de A) mas los controles calculados insertados el Formulario A . Esos datos calculados los puedo grabar en la tabla que guarda todos los pacientes ejecutando una macro o codigo .
    Mi problema es automatizar (ya que manualmente lo puedo hacer registro por registro) la grabacion en un campo de la tabla desde el control calculado .
    Para que todo esto?
    Desde una agenda diaria que tiene un control calendar me muestra todos los turnos de cada dia asignados a cada paciente , donde necesito que tambien me muestre cuantas sesiones le restan para terminar .
    Desde ya muchas gracias
    Daniel

    Responder
  3. Prueba a sustituir el

    Prueba a sustituir el código del botón por un msgbox, a ver si de esa manera te funciona (seguro que si). No se lo que hace ese código tuyo, a lo mejor necesitas llevar el enfoque al formulario antes, también puedes hacer que se ejecute desde un botón del formulario B y que después cierre el formulario, por ejemplo con un botón aceptar.
    También podrías probar a poner ese código en un módulo independiente y público, es cuestión de ir haciendo pruebas hasta dar con la solución. Cuentanos…

    Responder
  4. Hola Tronico
    Muchas gracias

    Hola Tronico
    Muchas gracias por responder. Te comento que estoy medio loco. Vengo haciendo todas esas pruebas que sugeris y hasta ahora sigo dandome contra la pared.
    Respecto del msgbox ANDA PERFECTO. mi problema es cuando quiero ejecutar el click de un boton (o cuadro de texto) cuyo evento ejecuta una macro, o macro transformada.
    Anda todo bien si lo cliqueo desde el formulario «A» donde esta declarado como publico -ejecuta la macro o el codigo de la macro convertida sin problemas-.El problema es cuando , cliqueo el boton ubicado en el formulario «B» , o «al salir» , de este mismo formulario «B» (como te mencione anteriormente). Aunque parezca caprichoso, le di mil vueltas y la unica manera de conseguir que me grabe en el campo «Restan» -del que depende el «Subformulario Pacientes» – mediante el sig codigo {.Restan = .SesProgr – .SesRealiz * -1} .
    -Si o si- necesito que me quede grabado en el Campo Restan de la tabla para que pueda verse desde otro formulario que me filtra por dias y horas
    Desde ya muchas gracias
    Daniel

    Responder
  5. Pasar macro a código access

    Hota Tronico, desde ya te agradezco que hayas respondido.
    Ya habia probado convirtiendola en codigo, el que funciona perfectamente si se cliquea directamente , pero al intentar hacerlo andar desde el «Private Sub Form_Close()» del formulario «Agenda» (o «Formulario B») me da un error similar a cuando llamaba la macro «SesRes»
    «se ha producido el error 2046 en tiempo de ejecucion»
    «error definido por la aplicacion o el objeto»
    cuando pulso Depurar me aparece en amarillo :
    «Form_Recursos.Restantes_Click»
    Estoy desorientado
    Public Sub Restantes_Click()
    With CodeContextObject
    .Restan = .SesProgr – .SesRealiz * -1
    DoCmd.RunCommand acCmdRefresh
    End With
    End Sub
    Private Sub Form_Close()
    If CurrentProject.AllForms(«Recursos»).IsLoaded Then
    Form_Recursos.Restantes_Click
    End If
    End Sub
    Daniel

    Responder
  6. Pulsar un botón de otro formulario con código en access

    Ante todo agradezo la ayuda que proporcionan mediante estas paginas.
    mi consulta es la sig:
    Hice una adaptación para hacer click en un boton que hace correr una macro
    Nombre de la macro «SesRes»
    nombre del boton en formulario A : «Restantes»
    Public Sub Restantes_Click()
    DoCmd.RunMacro («SesRes»), 1, 1
    End Sub
    (cuando lo ejecuto directamente desde el Formulario A anda perfecto)
    Mi problema es cuando lo quiero ejecutar desde el cierre del Formulario B
    Private Sub Form_Close()
    If CurrentProject.AllForms(«Recursos»).IsLoaded Then
    Form_Recursos.Restantes_Click
    End If
    End Sub
    Al cerrar form me aparece el sig mensaje:
    «Falló la acción» /Nombre de Macro «SesRes»/Condición «Verdadero»/Nombre de acción «Ejecutar Comando»/Argumentos «18»
    Detengo la acción y me aparece el sig mens.
    «se ha producido el error 2046 en tiempo de ejecucion»
    «la accion o comando»I» no esta disponible ahora»
    cuando pulso Depurar me aparece en amarillo :
    «Form_Recursos.Restantes_Click»
    Desde ya les estoy muy agradecido. revise todo y no encuentro como solucionar el problema

    Responder
  7. Pasar macro a código access

    Uhmm… puede que el problema esté en la llamada a la macro, prueba a convertir la macro a código y poner el código en el mismo módulo del formulario en vez de hacer la llamada a la macro, por ver si el problema viene por ahí.

    Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.