Programar visual basic una función que me devuelva si el form esta abierto

Soy nuevo en esto de la programación y autodidacta. Mis avances son muy lentos. La cuestión es que les quiero decir a Access mediante el editor de visual basic lo siguiente:

Al hacer ckick en un botón (evento)

Si esta abierto el form POR haz un refresh y cierra el form Y (siendo este el que esta abierto y tiene el Botón que se acciona).

Sino (else) cierra el formulario Y

¿Alguien me puede ayudar? Muchas gracias por vuestro tiempo, creo que sois cojonudamente altruistas respondiendo a preguntas como la mía!

2 respuestas

Respuesta
2

Te pongo la función que utilizo yo para saber si el formulario está abierto o no:

'--------------------------------------------------------------------------------------------
'Función que indica si un formulario está cargado o no
'--------------------------------------------------------------------------------------------
Public Function fncFormCargado(elFormulario As String) As Boolean
    Dim Frm As AccessObject
    fncFormCargado = False 'Inicializamos la función en "Falso"
    For Each Frm In CurrentProject.AllForms
        If Frm.Name = elFormulario Then
            If Frm.IsLoaded = True Then
                fncFormCargado = True 'Si está cargado, la función devuelve "Verdadero"
                Exit Function
            End If
        End If
    Next Frm
End Function

Tienes que pasarle como argumento el nombre del formulario que quieres comprobar. Por ejemplo, quieres saber si el formulario "FMenu" está abierto o no, y si lo está, cerrarlo:

If fncFormCargado("FMenu")=true Then DoCmd.Close acForm,"FMenu"

A ver si te sirve.

Saludos!


http://nksvaccessolutions.com/Foro/ 

Muchas gracias por tu respuesta pero no la se aplicar. (soy novato novato)

Si me voy a las propiedades del botón i a Eventos abro el editor en "Al hacer Click",

Puedo pegar el código que me has pasado, tal cual, para crear la función fncFormCargado i luego poner algo asi?

if fncformCargado (DESPESES)=True Then acForm, "DESPESES" ME.Refresh & DoCmd.Close

muchas gracias por contestar!!!!

No, la función la pegas en un módulo independiente (Insertar-> módulo)

Luego, en el evento "Al hacer click" de tu botón es donde programas el código de la acción:

If fncFormCargado("DESPESES")=True Then
Me. Refresh
DoCmd. Close acForm, Me. Name
Else
DoCmd.Close acForm, Me.Name
End If

Mi recomendación sería, antes de que te pongas a pegar códigos a lo loco, que mires algún manual de VBA, para entender lo que haces, si no, solo vas a conseguir liarte más y más... En la web de Neckkito tienes uno muy bueno (ese fue el primero que seguí...)

Saludos!


Hola de nuevo,

Una vez creada la función en un modulo, he escrito en el procedimiento evento "al hacer click" lo siguiente:

Private Sub Tancar_Formulari_Click()
On Error GoTo Err_Tancar_Formulari_Click

If fncFormCargado("DESPESES") = True Then
Me.Refresh
DoCmd.Close acForm, Me.Name
Else
DoCmd.Close acForm, Me.Name
End If
End Sub

Entonces me da el error que no se ha definido a etiqueta.

Borra la línea del on error

¡Gracias! perfecto. funciona como yo queria que funcionara.

Solo puedo agradecerte que me hayas respondido.

me he registrado en vuestro foro pero creo que no voy ha estar a l'altura del foro yq que yo soy principiante y veo que hay mucho nivel. Quizás no intervenga mucho pero me conectare para ir leyendo la soluciones planteades y así veré si puedo aprovechar alguna.

muchas gracias otra vez!!!!!!!!!

Respuesta

Yo sé que a esta altura a nadie le importa, pero mi solución fue colocar en un módulo una variable global booleana y cada vez que aperturo un Form lo cambio a "TRUE" y cuando lo cierro lo coloco en "FALSE", cuando presiono el botón para abrir el formulario realizo una condición:if Form_activo= true then

frm_principal.setfocus

else       

frm_principal.show

end if

Eso fue todo -

Yo sé que a esta altura a nadie le importa, pero mi solución fue colocar en un módulo una variable global booleana y cada vez que aperturo un Form lo cambio a "TRUE" y cuando lo cierro lo coloco en "FALSE", cuando presiono el botón para abrir el formulario realizo una condición:

if Form_activo= true then

frm_principal.setfocus

else       

frm_principal.show

end if

Eso fue todo -

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas