Visual Basic para Aplicaciones - VBA - Access: Cualquier directorio / programa se superpone entre mi Form y mi MsgBox

Life is soft - evento anual de software empresarial
 
Vista:

VBA - Access: Cualquier directorio / programa se superpone entre mi Form y mi MsgBox

Publicado por Marcos (3 intervenciones) el 25/01/2022 16:50:16
Buenas, gente. ¿Cómo están?

Comenzaré poniéndololos en contexto: Estoy escribiendo una aplicación VBA con múltiples formularios y, para mejorar la experiencia del usuario, oculté el entorno de Microsoft Access al iniciar la aplicación para que sólo los formularios sean visibles.

El problema es cuando la aplicación muestra cuadros de mensaje al usuario, ya que, por alguna razón, es como si el formulario dejara de estar en "primer plano" y entre éste y el cuadro de mensaje aparece cualquier directorio/programa que esté detrás. Así:

IZ1oa

Afortunadamente, sé de dónde viene el "problema". Sin el "módulo" que oculta toda la interfaz de Microsoft Access al usuario cuando ejecuta la aplicación, estas "superposiciones" no suceden.

Además, cuando aparece el cuadro de mensaje, el logotipo de MS Access también vuelve a aparecer en la barra de tareas del escritorio de Windows.

El código de mi módulo es el siguiente:

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Option Compare Database
 
'Guarda Valor de Estados de Ventana
Dim dwReturn As Long
 
'Constantes de Estado de Ventana
Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMAXIMIZED = 3
 
' Se identifica Plataforma 32 o 64 bits'
#If Win64 Then
    Private Declare PtrSafe Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
#Else
    Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If
 
'Llamada de funcion para ocultar Ventana de Access
Public Function fAccessWindow(Optional Procedure As String, Optional SwitchStatus As Boolean, Optional StatusCheck As Boolean) As Boolean
 
'Tres Modos de llamada de Ventana: Ocultada, Visible, Minimizada
If Procedure = "Hide" Then
    dwReturn = ShowWindow(Application.hWndAccessApp, SW_HIDE)
End If
 
If Procedure = "Show" Then
    dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED)
End If
 
If Procedure = "Minimize" Then
    dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMINIMIZED)
End If
 
If SwitchStatus = True Then
 
    If IsWindowVisible(hWndAccessApp) = 1 Then
        dwReturn = ShowWindow(Application.hWndAccessApp, SW_HIDE)
    Else
        dwReturn = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED)
    End If
End If
 
If StatusCheck = True Then
    If IsWindowVisible(hWndAccessApp) = 0 Then
        fAccessWindow = False
    End If
 
    If IsWindowVisible(hWndAccessApp) = 1 Then
        fAccessWindow = True
    End If
End If
 
End Function

Luego tengo estas líneas en mi formulario de arranque principal:

1
2
3
Private Sub Form_Open(Cancel As Integer)
fAccessWindow "Hide", False, False
End Sub

Desde ya, muchísimas gracias. ¡Ojalá tenga solución!

PD: Todos los formularios tienen la opción "Emergente" y "Modal" activadas.
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

VBA - Access: Cualquier directorio / programa se superpone entre mi Form y mi MsgBox

Publicado por Marcos (3 intervenciones) el 25/01/2022 20:55:08
Edit: Ya lo solucioné simplemente cambiando el tipo de evento desde dónde llamaba a la función en el formulario principal.

En vez de form_Open (al abrir), tiene que ser form_OnLoad (al cargar).

1
2
3
Private Sub Form_OnLoad(Cancel As Integer)
fAccessWindow "Hide", False, False
End Sub
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

VBA - Access: Cualquier directorio / programa se superpone entre mi Form y mi MsgBox

Publicado por Marcos (3 intervenciones) el 26/01/2022 00:15:35
Nuevo edit: Me equivoqué. No solucioné nada porque la expresión correcta sería Form_Load (Cancel as Integer). Escribiendo "OnLoad", que no existe, lo único que hice fue desactivar la llamada a la función para ocultar el entorno de Access y por eso "funcionó".
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