タスクバーの 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 ボタンが表示されないことです。