マクロ講座フォームを2つ以上表示する
フォームを2つ以上表示する
マクロ 44回
見出し2
フォームを2つ(複数)表示したいという場合があります。
どうすれば複数のユーザーフォームを表示できるでしょうか。
「モーダル」と「モードレス」の場合に分けて説明します。
(サンプルファイルは、こちらから
マクロ44回サンプルデータ)
モーダルの場合で複数表示する
まず、ユーザーフォームを2つ作成します。
UserForm1にコマンドボタンを追加し、ボタンクリックでUserForm2を表示することにします。モーダルで複数のフォームを表示するには、フォームのイベントか、フォームに追加したボタンなどに、もう一つのフォームを表示するコードを記入します。
UserForm1にボタンを設置したので、こちらに以下のコードを書きます。
Private Sub CommandButton1_Click() UserForm2.Show End Sub
そして標準モジュールには、UserForm1を表示するコードを記述します。引数のvbModalは省略しても規定値なのでモーダルになります。
Sub Form_Show_Modal() UserForm1.Show vbModal End Sub
UserForm1を起動し、コマンドボタンをクリックすると、UserForm2が表示されます。
モードレスで複数表示する
モードレスで複数のフォームを表示にする場合は、フォームの表示コードを、2つ続けて記述する方法があります。 まず、1つ目のフォーム表示をモードレスにします。UserForm2はモーダルです。
Sub Form_Show_Modeless() UserForm1.Show vbModeless UserForm2.Show End Sub
この場合は、UserForm1がモードレスなので、フォーカスがUserForm1にあるときは、シートやセルの操作ができます。
また、シームレスに両方のフォームを行き来しながら操作するには、2つのフォームともモードレスにします。
Sub Form_Show_ModelessW() UserForm1.Show vbModeless UserForm2.Show vbModeless End Sub
この場合は、ユーザーフォームがどちらもモードレスです。どちらのフォームにフォーカスがあってもシート操作等ができます。
コードに書かずに、ユーザーフォームのプロパティでモードレスに設定することもできます。