【VBA】 フォームデザイナーでユーザーフォームに連動してコントロールを拡大する方法

スポンサーリンク

フォームデザイナーからユーザーフォームの大きさ変更する際、コントロールの大きさや位置を変えるのが面倒だと感じたことはありませんか?

実は上記の問題はVBAを利用して、フォームデザイナーを自動操作することで解消できます。

今回は、フォームデザイナーのプロパティをVBAから操作して、ユーザーフォームとコントロールをまとめて拡大する方法を紹介します。

フォームデザイナーからフォームサイズを拡大する

フォームを拡大するコード

フォームデザイナーのプロパティを変更して、ユーザーフォームとコントロールを指定した倍率に拡大するコードです。

コードを実行する際は、「VBA プロジェクト オブジェクトモデルへのアクセスを信頼する」を有効にする必要あります。

'-----------------------------------------------------------------
'フォームデザイナーのプロパティを変更してユーザーフォームのサイズを変更する
'-----------------------------------------------------------------
'formName:拡大対象のユーザフォーム名称
'scaleRate:拡大倍率
'-----------------------------------------------------------------
Sub FormSizeChange(ByVal formName As String, ByVal scaleRate As Double)
    'フォームのサイズを変更
    Dim formObj As Variant
    Set formObj = ThisWorkbook.VBProject.VBComponents.Item(formName)
    With formObj
        .Properties("Width") = .Properties("Width") * scaleRate
        .Properties("Height") = .Properties("Height") * scaleRate
    End With
    'フォーム内の全コントロールのサイズを変更
    Dim con As Variant
    For Each con In formObj.Designer.Controls
        With con
            .Width = .Width * scaleRate
            .Height = .Height * scaleRate
            .Top = .Top * scaleRate
            .Left = .Left * scaleRate
            On Error Resume Next
            .Font.Size = .Font.Size * scaleRate
            On Error GoTo 0
        End With
    Next
End Sub

サンプルコード

使用例です。上記の「フォームサイズを自動変更するコード」と組み合わせると動作します。

入力されて設定どおりに、ユーザーフォームの拡大を行います。

'-----------------------------------------------------------------
'入力フォーム
'-----------------------------------------------------------------
Sub InputFormSize()
    'ユーザーフォーム名を入力
    Dim formName As String
    formName = InputBox("フォーム名を入力してください。")
    '倍率を入力
    Dim scaleRate As Double:
    scaleRate = CDbl(InputBox("倍率を入力してください。"))
    'フォームサイズ変更
    Call FormSizeChange(formName, scaleRate)
End Sub
タイトルとURLをコピーしました