【VBA】ユーザー操作でユーザーフォームをリサイズする方法

スポンサーリンク

ユーザー操作でユーザーフォームの大きさを変更する方法を説明していきます。

ユーザーフォームをリサイズする方法(コントロールの自動調整なし)

モジュール側のコード

適当なモジュールに以下のコードを貼り付けてください。

Option Explicit

'フォームリサイズに使用するWindows API宣言(64bit/32bit両対応)
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
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 FormRisizeSet()
    Dim result As Long
    Dim hwnd As Long
    Dim Wnd_STYLE As Long

    hwnd = GetActiveWindow()
    Wnd_STYLE = GetWindowLong(hwnd, GWL_STYLE)
    Wnd_STYLE = Wnd_STYLE Or WS_THICKFRAME Or &H30000

    result = SetWindowLong(hwnd, GWL_STYLE, Wnd_STYLE)
    result = DrawMenuBar(hwnd)
End Sub

ユーザーフォーム側のコード

以下のコードをユーザーフォームに張り付けてください。

''' <summary>
''' 'フォームをリサイズ可能な状態にする
''' </summary>
''' <remarks></remarks>
Private Sub UserForm_Activate()
    Call FormRisizeSet
End Sub

実際の動作

ユーザー側の操作でフォームサイズは変更できますが、コントロールの位置や大きさは変わりません。

フォームサイズに合わせて、コントロールのサイズや位置を自動調整したい場合は次の方法を試してみたください。

ユーザーフォームをリサイズする方法(コントロールの自動調整あり)

フォームのサイズに応じて自動的にコントロールの大きさや位置を調整するクラス「FormResizeClass」と組み合わせて、ユーザーフォームをリサイズした際にコントロールの拡大縮小と位置調整を行います。

モジュール側のコード

「ユーザーフォームをリサイズする方法(コントロールの自動調整なし)」とコードは同じです。

ユーザーフォーム側のコード

以下のコードをユーザーフォームに張り付けてください。

Dim FormResizeClass As New FormResizeClass

''' <summary>
''' 'フォームをリサイズ可能な状態にする
''' </summary>
''' <remarks></remarks>
Private Sub UserForm_Activate()
    Call FormResizeClass.FormSizeRec(Me)  'フォームとコントロールの大きさ記録
    Call FormRisizeSet 'フォームをリサイズ可能にする
End Sub

''' <summary>
''' 'フォームをリサイズした際にコントロールの大きさと位置を調整する
''' </summary>
''' <remarks></remarks>
Private Sub UserForm_Resize()
    Call FormResizeClass.FormSizeChange(Me.Width, Me.Height)
End Sub

実際の動作

ユーザー側の操作でフォームサイズは変更に合わせて、コントロールの大きさと位置が自動調整されています。

ブログランキング
PVアクセスランキング にほんブログ村
タイトルとURLをコピーしました