6

タスクバーの Excel ボタンを非表示にし、ユーザーフォームに別のボタンを表示して、それ自体がアプリケーションのように感じられるようにしたいと考えています。これは多くのことがカバーされていることは知っていますが、特定の問題で問題があります。コードをステップ実行すると正常に動作しますが、正常に実行すると動作しません。Userform1 のクラス モジュールに配置したコードを次に示します。

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 の 2 行目から最後の行に進むと、タスク バーに別のボタンが表示され、最後の行はタスク バーの Excel ワークブックの元のボタンを非表示にします。その後、通常のアプリケーションと同様に、タスクバーに最大化または最小化できるユーザーフォームだけが残ります。問題は、コードを介してユーザーフォームをロードすると、ユーザーフォームの別のボタンがタスクバーに表示されないため、タスクバーに Excel ボタンが表示されないことです。

4

2 に答える 2

1

私自身の質問に答えるために:問題は私が上に投稿したコードではなく、ユーザーフォームがロードされた方法にありました。モードレスとしてロードする必要があります。

于 2014-01-16T09:43:29.490 に答える
0

メインの UserForm_Initialize サブルーチンに次のコードを追加するだけで、デスクトップでフォームを開いたまま、Excel アプリケーション ウィンドウを最小化できます。

Private Sub minimizeWindow()
  With Application
    .WindowState = xlMinimized
  End With
End sub
于 2017-01-11T00:41:24.640 に答える