Access - Saber si un formulario está abierto

 
Vista:

Saber si un formulario está abierto

Publicado por zanga (26 intervenciones) el 24/05/2006 12:43:33
Hola, existe algún método en VBA que te diga si un formulario está abierto para usarlo en un if:

If (estaAbierto(<nombreFormulario>)) then...

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Verificar si un formulario está abierto en VBA

Publicado por Alejandro (4142 intervenciones) el 19/07/2023 16:35:08
Sí, Zanga, en VBA puedes utilizar la función `CurrentProject.AllForms` junto con un bucle `For Each` para verificar si un formulario está abierto. Aquí tienes un ejemplo de cómo puedes implementarlo:

1
2
3
4
5
6
7
8
9
10
11
12
Function EstaAbierto(nombreFormulario As String) As Boolean
    Dim frm As Access.Form
 
    For Each frm In CurrentProject.AllForms
        If frm.Name = nombreFormulario Then
            EstaAbierto = True
            Exit Function
        End If
    Next frm
 
    EstaAbierto = False
End Function

En tu código, puedes usar la función `EstaAbierto` de la siguiente manera:

1
2
3
4
5
6
7
If EstaAbierto("NombreDelFormulario") Then
    ' El formulario está abierto
    ' Realiza las acciones necesarias
Else
    ' El formulario no está abierto
    ' Realiza otras acciones
End If

Asegúrate de reemplazar `"NombreDelFormulario"` con el nombre real de tu formulario.

Con este enfoque, la función `EstaAbierto` recorre todos los formularios en el proyecto actual y compara el nombre de cada formulario con el nombre proporcionado. Si encuentra una coincidencia, devuelve `True`; de lo contrario, devuelve `False`.

Espero que esto te sea útil. ¡Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Victor

Verificar si un formulario está abierto en VBA

Publicado por Victor (3 intervenciones) el 11/08/2023 14:23:10
Hola Alejandro,
He intentado implantar la función pero obtengo un error y no sé por qué...
Me podrías echar una mano?

Éste es mi código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Option Compare Database
Function EstaAbierto(Formulario_Programa_Sin_Filtros As String) As Boolean
    Dim frm As Access.Form
 
 
    For Each frm In CurrentProject.AllForms
        If Form.Name = Formulario_Programa_Sin_Filtros Then
            EstaAbierto = True
            Exit Function
        End If
    Next frm
 
    EstaAbierto = False
End Function
 
 
 
Private Sub Inicio_Click()
 
'Compruebo si está abierto "Formulario_Programa_Sin_Filtro" y si es así lo cierro
 
If EstaAbierto("Formulario_Programa_Sin_Filtros") = True Then
DoCmd.Close acForm, "Formulario_Programa_Sin_Filtros"
End If
 
'Cerramos el formulario actual
DoCmd.Close acForm, "Formulario_Pool_Corte"
 
'Abrimos formulario Inicio
DoCmd.OpenForm "Inicio"
 
End Sub

Y el error que me aparece es el siguiente:


ventana-error

error


He de decir que el código para comprobar esto, lo tengo en otro formulario (el que señalo en azul):

otroform

No sé si sabrías decirme qué puede estar pasando...

Gracias de antemano!

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro

Error en función EstaAbierto

Publicado por Alejandro (4142 intervenciones) el 11/08/2023 16:18:25
¡Hola, Víctor!

El error que estás experimentando parece estar relacionado con un problema en la función `EstaAbierto` que intenta verificar si un formulario está abierto. Parece que hay un pequeño error en el código que está causando este problema. Veamos si podemos solucionarlo.

El error específico se debe a que estás utilizando `Form.Name` en lugar de `frm.Name` dentro del bucle `For Each`. Aquí está el código corregido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Option Compare Database
Function EstaAbierto(Formulario_Programa_Sin_Filtros As String) As Boolean
    Dim frm As Access.Form
 
    For Each frm In CurrentProject.AllForms
        If frm.Name = Formulario_Programa_Sin_Filtros Then
            EstaAbierto = True
            Exit Function
        End If
    Next frm
 
    EstaAbierto = False
End Function
 
Private Sub Inicio_Click()
    ' Compruebo si está abierto "Formulario_Programa_Sin_Filtro" y si es así lo cierro
    If EstaAbierto("Formulario_Programa_Sin_Filtros") = True Then
        DoCmd.Close acForm, "Formulario_Programa_Sin_Filtros"
    End If
 
    ' Cerramos el formulario actual
    DoCmd.Close acForm, "Formulario_Pool_Corte"
 
    ' Abrimos formulario Inicio
    DoCmd.OpenForm "Inicio"
End Sub

Realicé la corrección en la línea `If frm.Name = Formulario_Programa_Sin_Filtros Then` para usar `frm.Name` en lugar de `Form.Name`. Con esta modificación, el código debería funcionar correctamente y evitar el error que estás viendo.

Por favor, inténtalo con este código corregido y verifica si resuelve tu problema. ¡Buena suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar