本記事には広告が含まれています

【VBA】UserFormに最小化・最大化ボタンを追加する方法|Windows API

ユーザーフォームに最小化/最大化ボタンを表示させる

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

使い方 ①ユーザーフォームを作成する

VBEでユーザーフォームを挿入する手順

プロジェクトエクスプローラー上で右クリック⇒「挿入」⇒「ユーザーフォーム」を選択します。

使い方 ②ユーザーフォームのコードを表示する

UserFormをダブルクリックしてコードを表示

赤枠内をダブルクリックしてコードを表示します。
リボンの「表示」⇒「コード」でも可
「F7」でも可

使い方 ③コードエリアへ関数をコピペ

UserForm_Initializeにコードを貼り付けた状態

コードエリアにはデフォルトで「UserForm_Click」プロシージャが表示されていると思いますが、無視or削除でOK。関数をコピペします。「Option Explicit」の指定は任意です。

【結果】ユーザーフォームに最小化/最大化ボタンが表示されます

最小化・最大化ボタンが表示されたUserForm

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

最小化したUserFormがデスクトップ左下に表示される

Comment