エクセルVBA API ユーザフォーム画面を最大化できるようにする。
ユーザーフォームには、画面の最大化する機能がない。
画面の通り、デフォルトではユーザーフォームに「画面の最大化、最小化」の機能はありません。
では、どうするかWindowsAPIを使えば設定が可能です(コードをコピペするだけでOKです)。
開発環境は、「Windows10 home」「Excel2019」です。
1 閲覧対象者
ユーザフォームのフォーム画面に、最大化、最小化の機能を付けたい方。
2 得られる効果
最大化、最小化の機能を付与する。ちなみに、マウスでサイズ変更も可能です。
3 最大化、最小化を設定するコード
' FindWindowAPI関数の宣言 Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long ' GetWindowLongAPI関数の宣言 Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _ (ByVal hWnd As LongPtr, ByVal nIndex As LongPtr) As Long ' Set WindowLongAPI関数の宣言 Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _ (ByVal hWnd As LongPtr, ByVal nIndex As LongPtr, ByVal dwNewLong As LongPtr) As Long ' DrawMenuBar関数の宣言 Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As LongPtr) As Long ' GetSystemMenu関数の宣言 Private Declare PtrSafe Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As Long, ByVal bRevert As LongPtr) As Long ' DeleteMenu関数の宣言 Private Declare PtrSafe Function DeleteMenu Lib "user32" _ (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As LongPtr) As Long '↓ウインドウメニュー関連定義 Private Const GWL_STYLE = -16 'スタイルを取得する定数 Private Const SC_CLOSE = &HF060 'システムメニューの「閉じる」 Private Const MF_BYCOMMAND = &H0& 'メニュー項目指定 Private Const WS_THICKFRAME = &H40000 'ウィンドウ フレームのウィンドウのサイズを使用できるを作成します。 Private Const WS_MINIMIZEBOX = &H20000 '最小化ボタン Private Const WS_MAXIMIZEBOX = &H10000 '最大化ボタン Private Sub UserForm_Initialize() Dim wRet As Long Dim hWnd As Long Dim wStyle As Long Dim hMenu As Long Dim rClose As Long hWnd = FindWindow("ThunderDFrame", Me.Caption) wStyle = GetWindowLong(hWnd, GWL_STYLE) wStyle = (wStyle Or WS_THICKFRAME Or WS_MAXIMIZEBOX Or WS_MINIMIZEBOX) 'Min,Maxメニューボタン、サイズ変更を付加 wRet = SetWindowLong(hWnd, GWL_STYLE, wStyle) 'ユーザーフォーム追加したボタンを設定 hMenu = GetSystemMenu(hWnd, 0&) 'メニュー情報を取得 'rClose = DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND) '「x」ボタンの無効化 wRet = DrawMenuBar(hWnd) 'ユーザーフォームのメニューバー外枠ほ再描画 End Sub
このコードを該当ユーザーフォームのフォームモジュールにコピペするだけで、最大化、最小化、マウスでのサイズ変更が可能になります。
4 使ってみたい方はnoteで無料DL
実際に使ってみたい方は、noteより無料ダウンロード可能です。
note.com