Os mostramos algunas funciones que nos permiten saber si un formulario está abierto en Access.
Os mostramos algunas funciones que nos permiten saber si un formulario está abierto, ésto es muy útil para cuando tenemos que interactuar con otro formulario y que en caso de que esté cerrado no nos de el consiguiente error.
Por ejemplo, yo lo uso en los formularios de búsqueda de clientes y de productos, desde el formulario de albaranes llamo al formulario buscador de clientes y traspaso el cliente deseado con esa condicion » si está abierto», lo mismo con los formularios de facturas y otros.
Para ello hay varias formas y la más sencilla sería ésta:
If CurrentProject.AllForms("NombreDelFormulario").IsLoaded Then
..........
End if
Y luego otras formas a través de funciones, ésta sería una:
Function IsLoaded(ByVal strFormName As String) As Integer
' Devuelve True si el formulario que se pasa como parámetro está abierto en modo formulario u hoja de datos
' Estas variables se usan como comprobar el valor devuelto por la función SysCmd
' y la propiedad CurrentView del formulario
Const conObjStateClosed = 0
Const conDesignView = 0
'El primer If usa la función SysCmd function prar comprobar el
'estado del formulario. Puede ser: no abierto,
'o no existente, abierto, nuevo, o modificado sin salvar
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then
'El segundo If comprueba la vista actual del formulario,
'asumiendo que el If anterior lo encontró abierto
'Si el formulario está abierto en modo formulario, la función devuelve
'verdadero. Si está en modo diseño devuelve falso
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True
End If
End If
End Function
Y ésta otra:
Public Function EstaAbierto(ByVal strObjeto As String, Tipo As AcObjectType) As Boolean
On Error GoTo EstaAbierto_TratamientoErrores
Select Case Tipo
Case acForm
If CurrentProject.AllForms(strObjeto).IsLoaded Then EstaAbierto = True
Case acReport
If CurrentProject.AllReports(strObjeto).IsLoaded Then EstaAbierto = True
End Select
EstaAbierto_Salir:
On Error GoTo 0
Exit Function
EstaAbierto_TratamientoErrores:
Select Case err
Case 2467
MsgBox "El objeto indicado no existe o no es del tipo indicado", vbCritical + vbOKOnly, "ATENCION"
Case Else
MsgBox "Error " & err.Number & " en proc.: EstaAbierto de Módulo: Módulo3 (" & err.Description & ")"
End Select
Resume EstaAbierto_Salir
End Function
Uso:
If EstaAbierto("formFacturas", acForm) Then
....
End if
Publicaciones relacionadas