2017-02-21 12 views
0

У меня есть база данных доступа с некоторыми формами и кодом vba позади форм.Form_Open Код VBA не работает

Form_Open (на каждой форме) У меня есть эта часть кода.

Dim hWindow As Long 
Dim nResult As Long 
Dim nCmdShow As Long 

    hWindow = Application.hWndAccessApp 
    nCmdShow = SW_HIDE 
    nResult = ShowWindow(ByVal hWindow, ByVal nCmdShow) 
    Call ShowWindow(Me.hWnd, SW_NORMAL) 

Это скрывает доступ и показывает только открытую форму.

Моя проблема заключается в том, что доступ начинается, но форма не открывается.

Мне нужно убить задачу доступа в диспетчере задач.

Есть ли способ решить эту проблему?

EDIT: Каждая форма является всплывающим окном

ответ

2

Как я понимаю, что вам нужно, чтобы скрыть главную форму и оставить всплывающую форму открытой. Я обычно использую настройку непрозрачности окна вместо бегов:

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long 

Private Const LWA_ALPHA  As Long = &H2& 
Private Const LWA_COLORKEY As Long = &H1& 
Private Const GWL_EXSTYLE As Long = -20 
Private Const WS_EX_LAYERED As Long = &H80000 

Public Function SetWndOpacity(hwnd As Long, opacity As Byte, clr As Long) 
    DoCmd.Maximize 
    SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED 
    SetLayeredWindowAttributes hwnd, 0&, opacity, LWA_ALPHA 
End Function 

Тогда звоните:

SetWndOpacity Access.hWndAccessApp(), 0, 0 
Смежные вопросы