Excel VBA ユーザーフォームのサイズを変更する

ユーザーフォーム作成/操作

ユーザーフォームのサイズを変更する方法をご説明します。

ユーザーフォームのサイズはマウスのドラッグで変更する方法と、プロパティの数値を変更する事で変更する方法があります。

そして、マウスやプロパティを直接操作するのではなく、VBAで指定する事も可能です。

それぞれ順にご説明したいと思います。

またユーザーフォームの他の操作については下記記事をご覧ください。

1.マウスドラッグでサイズを変更する

まずは最も簡単なマウスドラッグでサイズを変更する方法です。

こちらは説明が不要かと思うくらい簡単です。

まずは作成したユーザーフォームをユーザーフォームモジュールで表示します。

作成方法がわからない方や、ユーザーフォームモジュールがわからない方は「ユーザーフォームの作り方と表示方法」をご覧ください。

上記のユーザーフォームの各辺の□が白い辺はドラッグが可能です。

こちらをマウスでドラッグすると、次の様に変更できます。

マウスドラッグでサイズを変更する事は、非常に簡単ですが細かい指定が難しいです。

細かい操作するにはプロパティを直接操作する方が良いです。

もし、今後Zoomなどでフォームのサイズを変更する事を想定する場合は、高さと幅の伸縮も考えて、プロパティで設定することをおすすめします。

2.プロパティでサイズを変更する

マウスドラッグでは細かい操作が難しいので、プロパティで指定する方法です。

マウスでおおまかなサイズに変更し、最後にプロパティで微調整を行うのが望ましいです。

また、次に説明するVBAで操作する事を想定した場合、操作し易い数値で作成しておくことをおすすめします。

プロパティを表示するには、「表示タブ」のプロパティウィンドウを選択します。

ユーザーフォームのプロパティはたくさんありますが、今回操作するには次の2つです。

高さ「Height」と幅「Width」です。

図で表示されているのは、マウスで適当にドラッグした時の数値です。

こちらを直接変更する事でサイズを変更できます。

高さ100、幅300に変更すると次のようにユーザーフォームが連動して変更されます。

ユーザーフォームを変更した場合、Excelを保存せずに閉じると変更内容が消えてしまいますので、変更内容が確定した場合は保存しましょう。

3.VBAでサイズを変更する

最後にVBAでユーザーフォームのサイズを操作する方法です。

こちらは変更した結果がユーザーフォームモジュール内のユーザーフォームに反映されるわけではないので、ご注意下さい。

表示したユーザーフォームのサイズを表示している間だけ、変更が有効となります。

そのため、上記2つの方法とは根本的に違い、表示する際に同時に指定します。

この違いについては、コントロールについても同じです。

VBAでもユーザーフォームオブジェクトの高さ「Heightプロパティ」と幅「Widthプロパティ」で指定します。

VBAで表示してサイズを変更するサンプルコード

モードレスの場合は、先にフォームを表示してからサイズの変更をしても、サイズを変更してからフォームを表示しても問題ないのですが、モーダルの場合は変更してからフォームを表示させます。

どちらでも対応できるように、基本的には先に設定してからフォームを表示させましょう。

モーダルで表示して変更する

表示モードをモーダル にする場合は、先にサイズの変更を行ってから表示する必要があります。

先に表示してから変更しようとすると変更が完了せずエラーとなります。

次のコードはサイズ指定が反映されず、閉じようとするとエラーになります。

Sub Sample1()
    
    With UserForm1
    
        .Show vbModal
        .Height = 100
        .Width = 300
        
    End With
        
End Sub

先にサイズの指定を行ってから表示すると正常に表示されます。

Sub Sample2()
    
    With UserForm1
        
        .Height = 100
        .Width = 300
        .Show vbModal
        
    End With
        
End Sub
モードレスで表示して変更する

モードレスの場合は、先に表示させてから変更しても、先に指定してからでも反映されます。

モーダルにも、モードレスにも対応できるように、先に詳細を設定してから表示することをおすすめします。

Sub Sample3()
    
    With UserForm1
    
        .Show vbModeless
        .Height = 100
        .Width = 300
        
    End With
        
End Sub
Sub Sample4()
    
    With UserForm1
        
        .Height = 100
        .Width = 300
        .Show vbModeless
        
    End With
        
End Sub
タイトルとURLをコピーしました