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

ユーザーフォームを動的に拡大する方法
ユーザーフォームを動的に拡大するメソッド
ユーザーフォームを動的に拡大するメソッドです。
「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