【VBA】ユーザーフォームを任意のタイミングで最大化/最小化する方法

ユーザーフォームを任意のタイミングで最大化したり最小化する方法を説明していきます。

ユーザーフォームを任意のタイミングで最大化/最小化する


準備


以下のコードをあらかじめ張り付けておいてください。


「UserFormStyleChange」クラスモジュール


以下のコードを「UserFormStyleChange」クラスモジュールに貼り付けてください。


Option Explicit
'---Windows API宣言(64bit/32bit両対応)---
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H10000
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMAXIMIZED = 3
Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal nCmdShow As LongPtr) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As Long
Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
''' <summary>
''' ユーザーフォームを最大化する
''' </summary>
''' <remarks></remarks>
Public Sub ShowMaximized()
Call StyleChange(SW_SHOWMAXIMIZED)
End Sub
''' <summary>
''' ユーザーフォームを最小化する
''' </summary>
''' <remarks></remarks>
Public Sub ShowMinimized()
Call StyleChange(SW_SHOWMINIMIZED)
End Sub
''' <summary>
''' 'ユーザーフォームの状態を変更する
''' </summary>
Private Sub StyleChange(ByVal par As Integer)
'フォームのハンドルを取得
Dim hwnd As Long
hwnd = GetActiveWindow()
'フォームの状態を変更する
Call ShowWindow(hwnd, par)
'タイトルバーに最大化/最小化ボタンを表示する
Dim Wnd_STYLE As Long
Wnd_STYLE = GetWindowLong(hwnd, GWL_STYLE)
Wnd_STYLE = Wnd_STYLE Or WS_THICKFRAME Or &H30000
Call SetWindowLong(hwnd, GWL_STYLE, Wnd_STYLE)
Call DrawMenuBar(hwnd)
End Sub

ユーザーフォームを最大化する


ユーザーフォームのモジュール内で「ShowMaximized」を呼び出します。


例えば「CommandButton1」をクリックした際に、最大化するには以下のようなコードを記述します。


Dim UserFormStyleChange As New UserFormStyleChange
Private Sub CommandButton1_Click()
Call UserFormStyleChange.ShowMaximized
End Sub

ユーザーフォームを最小化する


ユーザーフォームのモジュール内で「ShowMinimized」を呼び出します。


例えば「CommandButton1」をクリックした際に、最小化するには以下のようなコードを記述します。


Dim UserFormStyleChange As New UserFormStyleChange
Private Sub CommandButton1_Click()
Call UserFormStyleChange.ShowMinimized
End Sub

この記事へのコメント

この記事へのトラックバック