Imprimir página | Cerrar ventana

Saber si existe un formulario

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86858
Fecha de impresión: 26/Marzo/2026 a las 20:58


Tema: Saber si existe un formulario
Publicado por: jorros
Asunto: Saber si existe un formulario
Fecha de publicación: 11/Febrero/2024 a las 08:36
Buenos dias 

Tengo un formulario TbUsuFormularios con el campo UsuNomForm Texto donde pongo el nombre de un formulario, quisiera que antes de actualizar comprobase que existe, para evitar errores de introducción.

No se me ocurre como consultarlo.

Gracias



Respuestas:
Publicado por: Parche
Fecha de publicación: 11/Febrero/2024 a las 10:59
Hola,
https://learn.microsoft.com/es-es/office/vba/api/access.allforms
Espero que te sirva.



Publicado por: xavi
Fecha de publicación: 11/Febrero/2024 a las 13:51
Hola,

Se puede recorrer la colección AllForms para comprobar que el nombre existe aunque también se puede mirar si el objeto existe en la tabla MSysObjects

Yo utilizo esta función:

Public Function FormExists(strNameForm As String) As Boolean

    ' esta función nos devuelve la existencia o no de un formulario en la aplicación
    ' para ello recorremos la tabla MSysObjects.
    ' Se podria utilizar un dcount o un dlookup pero requiere el doble de tiempo
    
    Dim rst As DAO.Recordset
    
    FormExists = False
    Set rst = CurrentDb.OpenRecordset("SELECT Name FROM MsysObjects WHERE Type = -32768 AND Name ='" & strNameForm & "'")
    FormExists = Not rst.EOF
    
    rst.Close
    Set rst = Nothing
    
End Function


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Mihura
Fecha de publicación: 11/Febrero/2024 a las 17:34
Yo más bien interpreto que necesitas saber si está abierto, no si existe.

En ese caso yo uso esto:

Public Function RT_EstaAbierto(ByVal Frm As String) As Boolean
    RT_EstaAbierto = False
    On Error Resume Next   'si no existe que no casque
    If CurrentProject.AllForms(Frm).IsLoaded Then
        If Err.Number = 2467 Then
            RT_EstaAbierto = False
          Else
            RT_EstaAbierto = True
        End If
    End If
End Function


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: xavi
Fecha de publicación: 11/Febrero/2024 a las 17:40
Ah! Si es para saber si el formulario está cargado yo utilizo esto otro. Además se evalúa que esté cargado en vista formulario

Public Function FormIsLoaded(ByVal strFormName As String) As Boolean
    If (SysCmd(acSysCmdGetObjectState, acForm, strFormName)) Then
        If (Forms(strFormName).CurrentView) Then
            FormIsLoaded = True
        End If
    End If
End Function

Como decimos, casi siempre hay más de un camino.

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: jorros
Fecha de publicación: 11/Febrero/2024 a las 17:40
Muchas gracias Xavi esto es justo lo que estaba buscando.

Se puede cerrar el hilo

Gracias Parche

Un saludo


Publicado por: jorros
Fecha de publicación: 11/Febrero/2024 a las 17:49

Buenas tardes Jesus, en la tabla TbUsuFormularios tengo el campo texto UsuNomForm, en ese campo pongo el nombre del formulario, si me equivoco (espacio, coma, error etc) el nombre se graba y cuando lo uso para dar permisos a un usuario para que habrá ese formulario me casca. Debe ser cuando das de alta ese registro cuando debe comprobar que existe.

 

Muy agradecido con tu función que guardo con la de Xavi



Imprimir página | Cerrar ventana