我想隐藏任务栏中的Excel按钮,并为我的用户窗体显示一个单独的按钮,以使其感觉像是一个应用程序。我知道这已经被覆盖了很多,但是我遇到了一个特定问题:我的代码在我单步执行时工作正常,但是如果我让它正常运行,则不会。下面是代码,我已经放置Userform1的类模块中:将Excel用户窗体显示为任务栏中的按钮
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
通过代码步进,当我步入第二到最后一行则AppActivate一个单独的按钮显示在任务栏,最后一行在任务栏中隐藏Excel工作簿的原始按钮。然后,我只剩下一个用户窗体,它可以像任何常规应用程序一样最大化或最小化到任务栏。问题是如果我通过代码加载用户窗体,用户窗体的单独按钮没有出现在任务栏中,所以任务栏中没有显示任何Excel按钮。
如果加上'DoEvents'后'DrawMenuBar lFrmWndHdl' – 2013-04-11 13:24:17
而且还'则AppActivate( “Microsoft Excel中”)后会发生什么' – 2013-04-11 13:30:32
我已经试过了。它没有帮助。我也尝试了application.wait。 – 2013-04-11 13:32:25