【VBA】動的にユーザーフォームを拡大する方法

ユーザーフォームを動的に拡大する方法について説明していきます。

ユーザーフォームを動的に拡大する方法

ユーザーフォームを動的に拡大するメソッド

ユーザーフォームを動的に拡大するメソッドです。

「FormInfoAcquisition」でユーザーフォームのサイズと位置情報を取得後、「FormSizeChange」でユーザーフォームの拡大を行います。

以下のコードの使用の際は、「Microsoft Scripting Runtime」を参照してください。

'' <summary>
'''倍率に合わせフォームサイズを変更する
''' </summary>
''' <param name="formObj">フォームのオブジェクト</param>
''' <param name="scaleRate">倍率</param>
''' <param name="formInfo">フォーム情報</param>
''' <remarks></remarks>
Sub FormSizeChange(ByRef formObj As Object, ByVal scaleRate As Double, ByRef formInfo As Dictionary)
    'フォームのサイズを変更
    With formObj
         .Width = formInfo(.Name)("Width") * scaleRate
         .Height = formInfo(.Name)("Height") * scaleRate
    End With
    'フォーム内の全コントロールのサイズと位置を変更
    Dim con As Variant
    For Each con In formObj.Controls
        With con
            .Width = formInfo(.Name)("Width") * scaleRate
            .Height = formInfo(.Name)("Height") * scaleRate
            .Top = formInfo(.Name)("Top") * scaleRate
            .Left = formInfo(.Name)("Left") * scaleRate
             On Error Resume Next
            .Font.Size = formInfo(.Name)("FontSize") * scaleRate
             On Error GoTo 0
        End With
    Next
End Sub

''' <summary>
'''フォームサイズを記録する
''' </summary>
''' <param name="formObj">フォームのオブジェクト</param>
''' <returns>フォーム情報</returns>
''' <remarks></remarks>
 Function FormInfoAcquisition(ByRef formObj As Object) As Dictionary
    '初期化
     Dim returnData As New Dictionary
     Set FormInfoAcquisition = returnData
    'フォームのサイズを記録
    With formObj
        returnData.Add .Name, New Dictionary
        returnData(.Name).Add "Width", .Width
        returnData(.Name).Add "Height", .Height
    End With
    'フォーム内の全コントロールのサイズと位置を記録
    Dim con As Variant
    For Each con In formObj.Controls
        With con
            returnData.Add .Name, New Dictionary
            returnData(.Name).Add "Width", .Width
            returnData(.Name).Add "Height", .Height
            returnData(.Name).Add "Top", .Top
            returnData(.Name).Add "Left", .Left
            On Error Resume Next
            returnData(.Name).Add "FontSize", .Font.Size
            On Error GoTo 0
        End With
    Next
End Function

サンプルコード

「ユーザーフォームを動的に拡大するメソッド」を利用して、ユーザーフォームを拡大するサンプルコードです。「CommandButton1」をクリックした際に通常サイズに戻し、「CommandButton2」をクリックした際に1.5倍に拡大します。

サンプルコードの使用の際は、適当なユーザーフォームに「CommandButton2」と「CommandButton2」を作成後、「ユーザーフォームを動的に拡大するメソッド」と一緒に以下のコードを貼り付けてください。

Dim formInfo As Dictionary 'フォーム情報記録用

''' <summary>
'''フォーム初期化
''' </summary>
''' <remarks></remarks>
Private Sub UserForm_Initialize()
    Set formInfo = FormInfoAcquisition(Me)
End Sub

''' <summary>
''' フォームサイズを元に戻す
''' </summary>
''' <remarks></remarks>
Private Sub CommandButton1_Click()
    Call FormSizeChange(Me, 1, formInfo)
End Sub

''' <summary>
''' フォームサイズを1.5倍に変更
''' </summary>
''' <remarks></remarks>
Private Sub CommandButton2_Click()
    Call FormSizeChange(Me, 1.5, formInfo)
End Sub
タイトルとURLをコピーしました