
Navegador guay entre formularios (usando variables temporales)
Publicado por Alejandro (9 intervenciones) el 06/04/2016 10:38:12
Hola a toda la comunidad. Quiero preguntar algo sencillito haber si es posible hacerlo.
Quiero diseñar en mi Access (que ya tiene varios formularios), el tipico navegador que te encontrarias en muchas aplicaciones donde a parte de un boton que te cierra el formulario (lo más facil del mundo), me gustaria poner un boton con la tipica flechita hacia atras que te lleve al FORMULARIO ANTERIOR (el que abrió el nuevo en el que estas). Digamos que en aspectos técnicos, quiero que el formulario que se abra "recuerde" qué otro formulario le abrió.
Despues de indagar por internet se me ocurrio una idea que estoy viendo si es posible.
Tengo un formulario "INICIO" que hace de interfaz inicial. Lo estoy probando para cuando abra otro formulario que se llama "INVESTIGADORES" (algo asi como la clasica tabla clientes). La idea es esta:
En el boton del formulario INICIO que te lleva a INVESTIGADORES, implemento este código:
Private Sub boton_AbrirInvestigadores_Click()
DoCmd.OpenForm "INVESTIGADORES", acNormal, , , , , "INICIO"
End Sub
*Como veis lo que hago es que abra INVESTIGADORES, pasandole en OpenArgs su propio nombre de formulario para que INVESTIGADORES lo recuerde, luego en el evento "Al cargar" de INVESTIGADORES, implemento esto:
Public Sub Form_Load()
Dim argumento As String
argumento = Me.OpenArgs
End Sub
*Hasta aqui todo bien y el formulario recoge el nombre del formulario que lo abrió en la variable "argumento", la cual es la que quiero usar en el siguiente codigo, en el evento "Al hacer click", del boton con la flechita hacia atras que tiene INVESTIGADORES, para que si clickeas te regrese al formulario QUE LE ABRIÓ:
Private Sub boton_IrAnterior_Click()
DoCmd.Close acForm, "INVESTIGADORES"
DoCmd.OpenForm argumento, acNormal
End Sub
Obviamente se que esto no funciona, y se que es porque inmediatamente despues del segundo código, despues de dar valor a "argumento", al terminar el procedimiento, argumento ya pierde el valor, no consigo almacenarlo en la memoria. Por eso se me ocurrió que la clave pueda ser usar variables temporales, cosa que hasta ahora no habia hecho y no se muy bien como hacerlo. Mi idea era crear un módulo llamado VarTemporales y poner:
Public/Global varform As String
*y en el código donde INVESTIGADORES recoge el OpenArgs (Al cargarlo) poner:
Private Sub Form_Load()
Dim argumento As String
argumento = Me.OpenArgs
VarTemporales!varform = argumento
End Sub
La idea es almacenar en una variable temporal siempre el último OpenArg recogido e implantar dicha recogida del OpenArg y su asignacion al módulo en todos los formularios que vayan a abrirse por medio de otro.
Se que no lo estoy haciendo bien sintácticamente pero tampoco se si esto puede hacerse. Me parece interesante saber de que forma puedo guardar variables globales en un módulo para darlas valor todo el tiempo que quiera y cuando quiera, y luego poder llamarlas desde eventos en formularios.
Espero que hayais entendido bien lo que planteo, si teneis dudas preguntarme y lo detallo más. Gracias de antemano.
Quiero diseñar en mi Access (que ya tiene varios formularios), el tipico navegador que te encontrarias en muchas aplicaciones donde a parte de un boton que te cierra el formulario (lo más facil del mundo), me gustaria poner un boton con la tipica flechita hacia atras que te lleve al FORMULARIO ANTERIOR (el que abrió el nuevo en el que estas). Digamos que en aspectos técnicos, quiero que el formulario que se abra "recuerde" qué otro formulario le abrió.
Despues de indagar por internet se me ocurrio una idea que estoy viendo si es posible.
Tengo un formulario "INICIO" que hace de interfaz inicial. Lo estoy probando para cuando abra otro formulario que se llama "INVESTIGADORES" (algo asi como la clasica tabla clientes). La idea es esta:
En el boton del formulario INICIO que te lleva a INVESTIGADORES, implemento este código:
Private Sub boton_AbrirInvestigadores_Click()
DoCmd.OpenForm "INVESTIGADORES", acNormal, , , , , "INICIO"
End Sub
*Como veis lo que hago es que abra INVESTIGADORES, pasandole en OpenArgs su propio nombre de formulario para que INVESTIGADORES lo recuerde, luego en el evento "Al cargar" de INVESTIGADORES, implemento esto:
Public Sub Form_Load()
Dim argumento As String
argumento = Me.OpenArgs
End Sub
*Hasta aqui todo bien y el formulario recoge el nombre del formulario que lo abrió en la variable "argumento", la cual es la que quiero usar en el siguiente codigo, en el evento "Al hacer click", del boton con la flechita hacia atras que tiene INVESTIGADORES, para que si clickeas te regrese al formulario QUE LE ABRIÓ:
Private Sub boton_IrAnterior_Click()
DoCmd.Close acForm, "INVESTIGADORES"
DoCmd.OpenForm argumento, acNormal
End Sub
Obviamente se que esto no funciona, y se que es porque inmediatamente despues del segundo código, despues de dar valor a "argumento", al terminar el procedimiento, argumento ya pierde el valor, no consigo almacenarlo en la memoria. Por eso se me ocurrió que la clave pueda ser usar variables temporales, cosa que hasta ahora no habia hecho y no se muy bien como hacerlo. Mi idea era crear un módulo llamado VarTemporales y poner:
Public/Global varform As String
*y en el código donde INVESTIGADORES recoge el OpenArgs (Al cargarlo) poner:
Private Sub Form_Load()
Dim argumento As String
argumento = Me.OpenArgs
VarTemporales!varform = argumento
End Sub
La idea es almacenar en una variable temporal siempre el último OpenArg recogido e implantar dicha recogida del OpenArg y su asignacion al módulo en todos los formularios que vayan a abrirse por medio de otro.
Se que no lo estoy haciendo bien sintácticamente pero tampoco se si esto puede hacerse. Me parece interesante saber de que forma puedo guardar variables globales en un módulo para darlas valor todo el tiempo que quiera y cuando quiera, y luego poder llamarlas desde eventos en formularios.
Espero que hayais entendido bien lo que planteo, si teneis dudas preguntarme y lo detallo más. Gracias de antemano.
Valora esta pregunta


0