Showメソッド 2011.09.11
ShowメソッドはUserFormオブジェクトを表示します。Userformを使う場合は必須のメソッドです。引数により動作に違いがあるため注意が必要です。
機能、使用例、引数
機能:UserFormオブジェクトを表示する。
Sub Form_Show() '使用例 UserForm1.Show '赤字部はユーザーフォームの名前 End Sub
引数:[Modal]
引数[Modal]はユーザーフォームのモーダル・モードレスの選択に使用します。
モーダル:フォーム以外は操作できません。
モードレス:フォーム以外の操作が可能になります。
ユーザーフォームとシートを並行して使用したい場合は、モードレスに設定すれば良いわけです。
尚、引数[ Modal ]を省略した場合はユーザーフォームはモーダルになります。
【設定値】
定数 値 内容
vbModal 1 ユーザーフォームはモーダルです。(既定値)
vbModeless 0 ユーザーフォームはモードレスです。
引数による動作の違い
引数をvbModalに設定した場合、そのユーザーフォームを閉じるまで、Userform1.Show後のコードは実行されません。
一方、引数をvbModelessに設定した場合、ユーザーフォームを開き終わった時点で、Userform1.Show後のコードが実行されます。
次の例の場合、モードレスに設定したForm_Show2は、ユーザーフォームが表示後、直ぐに消えてしまいます。尚、この場合ユーザーフォームのイベントプロシージャ「UserForm_Initialize」は実行されますが、「UserForm_Activate」は実行されないようです。
vbModelessを設定する場合は、この点に注意しましょう。
Sub Form_Show1() 'モーダルに設定 UserForm1.Show vbModal Unload UserForm1 End Sub
Sub Form_Show2() 'モードレスに設定 UserForm1.Show vbModeless Unload UserForm1 End Sub
※上記コードを試す場合は、予めユーザーフォーム「Userform1」を挿入しておく必要があります。
モーダル設定での注意
フォームをvbModalで表示した場合、下図のように、プリントプレビューのコードを実行すると、Excelがフリーズします。
フォームをvbModelessで表示した場合は、この問題を回避できますが、vbModalで表示したい場合もあると思います。そのような時には、フォームを非表示にし、プリントプレビュー後に再表示することで、この問題に対応できます。
Private Sub CommandButton1_Click() With Me .Hide Worksheets(1).PrintPreview .Show End With End Sub
※上記コードは、「Userform1」に配置したコマンドボタン1の「Click」イベントに記述します。
※再表示の際、フォームの「Activate」イベントが発生します。覚えておくと良いでしょう。