2013-04-11 35 views
5

我想隐藏任务栏中的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按钮。

+0

如果加上'DoEvents'后'DrawMenuBar lFrmWndHdl' – 2013-04-11 13:24:17

+0

而且还'则AppActivate( “Microsoft Excel中”)后会发生什么' – 2013-04-11 13:30:32

+0

我已经试过了。它没有帮助。我也尝试了application.wait。 – 2013-04-11 13:32:25

回答

1

要回答我自己的问题:问题不在我上面发布的代码中,而是以用户窗体加载的方式。它应该作为无模式加载。

0

只需将下面的代码放在您的主UserForm_Initialize子文件中,它将最小化Excel应用程序窗口,同时使您的表单在桌面上保持打开状态。

Private Sub minimizeWindow() 
    With Application 
    .WindowState = xlMinimized 
    End With 
End sub 
+0

这仍将在任务栏中显示Excel应用程序。我想隐藏它。 – 2017-01-11 15:35:00

相关问题