VBAのUserFormに最小化・最大化ボタンを追加するには、Windows APIを使います。 以下のコードをUserFormモジュールにコピペするだけで実装できます。
コードコピペ ~クリックするだけでコピー完了!~
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
Private Declare PtrSafe Sub SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)
Private Declare PtrSafe Sub DrawMenuBar Lib "user32" (ByVal Hwnd As Long)
Private Const GWL_STYLE As Long = -16
Private Const WS_THICKFRAME As Long = &H40000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Sub UserForm_Initialize()
'■最小化ボタン・最大化ボタン付与
Const fWINDOWSTYLE As Long = WS_THICKFRAME Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX
Dim myHwnd As Long
Dim myWindowLong As Long
myHwnd = FindWindow("ThunderDFrame", Caption)
myWindowLong = GetWindowLong(myHwnd, GWL_STYLE)
SetWindowLong myHwnd, GWL_STYLE, myWindowLong Or fWINDOWSTYLE
DrawMenuBar myHwnd
End Sub
使い方 ①ユーザーフォームを作成する

プロジェクトエクスプローラー上で右クリック⇒「挿入」⇒「ユーザーフォーム」を選択します。
使い方 ②ユーザーフォームのコードを表示する

赤枠内をダブルクリックしてコードを表示します。
リボンの「表示」⇒「コード」でも可
「F7」でも可
使い方 ③コードエリアへ関数をコピペ

コードエリアにはデフォルトで「UserForm_Click」プロシージャが表示されていると思いますが、無視or削除でOK。関数をコピペします。「Option Explicit」の指定は任意です。
【結果】ユーザーフォームに最小化/最大化ボタンが表示されます

最小化/最大化ボタンが表示されました。1点、通常のウインドウと異なる動作をする点があります。通常のウインドウだと最小化ボタンを押すとタスクバーからウインドウを呼び出せますが、ユーザーフォームはタスクバーに表示されません。代わりに、以下のように、画面の目立たない位置に小さく表示されます(Win11)の動作。



Comment