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í:

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:
Luego tengo estas líneas en mi formulario de arranque principal:
Desde ya, muchísimas gracias. ¡Ojalá tenga solución!
PD: Todos los formularios tienen la opción "Emergente" y "Modal" activadas.
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í:

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


0