ユーザーフォームのサイズを変更する方法をご説明します。
ユーザーフォームのサイズはマウスのドラッグで変更する方法と、プロパティの数値を変更する事で変更する方法があります。
そして、マウスやプロパティを直接操作するのではなく、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