エクセルVBA API ユーザフォーム画面を最大化できるようにする。

ユーザーフォームには、画面の最大化する機能がない。

f:id:bimori466:20200923220339p:plain

画面の通り、デフォルトではユーザーフォームに「画面の最大化、最小化」の機能はありません。
では、どうするかWindowsAPIを使えば設定が可能です(コードをコピペするだけでOKです)。

開発環境は、「Windows10 home」「Excel2019」です。


1 閲覧対象者

ユーザフォームのフォーム画面に、最大化、最小化の機能を付けたい方。

2 得られる効果

f:id:bimori466:20200923220851p:plain

最大化、最小化の機能を付与する。ちなみに、マウスでサイズ変更も可能です。

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