Chcę ukryć przycisk programu Excel na pasku zadań i wyświetlić osobny przycisk dla mojego formularza użytkownika, aby samemu poczuł się jak aplikacja. Wiem, że to zostało dużo pokryte, ale mam problem z konkretnym problemem: mój kod działa poprawnie, kiedy go przejdę, ale nie, jeśli pozwolę mu działać normalnie. Oto kod, który umieściłem w module klasy UserForm1:Wyświetlanie formularza użytkownika programu Excel jako przycisku na pasku zadań
Option Explicit
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 DrawMenuBar _
Lib "user32" (_
ByVal hWnd As Long) _
As Long
Private Declare Function FindWindowA _
Lib "user32" (_
ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long
Private Const GWL_EXSTYLE = (-20)
Private Const GWL_STYLE As Long = (-16)
Private Const WS_EX_APPWINDOW = &H40000
Private Const WS_SYSMENU As Long = &H80000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Sub UserForm_Activate()
Dim lFrmWndHdl As Long
Dim lStyle As Long
lFrmWndHdl = FindWindowA(vbNullString, Me.Caption)
lStyle = GetWindowLong(lFrmWndHdl, GWL_STYLE)
lStyle = lStyle Or WS_SYSMENU
lStyle = lStyle Or WS_MINIMIZEBOX
lStyle = lStyle Or WS_MAXIMIZEBOX
SetWindowLong lFrmWndHdl, GWL_STYLE, (lStyle)
lStyle = GetWindowLong(lFrmWndHdl, GWL_EXSTYLE)
lStyle = lStyle Or WS_EX_APPWINDOW
SetWindowLong lFrmWndHdl, GWL_EXSTYLE, lStyle
DrawMenuBar lFrmWndHdl
AppActivate ("Microsoft Excel")
ThisWorkbook.Application.Visible = False
End Sub
Stepping za pomocą kodu, kiedy wkroczyć 2 do ostatniego wiersza AppActivate oddzielny przycisk pojawia się na pasku zadań, a ostatnim wierszu ukrywa oryginalny przycisk skoroszytu programu Excel na pasku zadań. Zostaje mi wtedy tylko formularz użytkownika, który można zmaksymalizować lub zminimalizować na pasku zadań, jak każdą normalną aplikację. Problem polega na tym, że jeśli załaduję formularz użytkownika za pomocą kodu, oddzielny przycisk dla formularza użytkownika nie pojawi się na pasku zadań, więc na pasku zadań nie ma już przycisków Excel.
Co się stanie, jeśli dodasz 'DoEvents' po' DrawMenuBar lFrmWndHdl' –
a także po 'AppActivate ("Microsoft Excel")' –
Próbowałem tego. To nie pomaga. Próbowałem również application.wait. –