マクロ講座フォームを2つ以上表示する

フォームを2つ以上表示する
フォームを2つ以上表示する

マクロ 44回

見出し2

フォームを2つ(複数)表示したいという場合があります。
どうすれば複数のユーザーフォームを表示できるでしょうか。

「モーダル」と「モードレス」の場合に分けて説明します。
(サンプルファイルは、こちらから マクロ44回サンプルデータ

モーダルの場合で複数表示する

  1. まず、ユーザーフォームを2つ作成します。
    UserForm1にコマンドボタンを追加し、ボタンクリックでUserForm2を表示することにします。

    フォームを2つ以上表示する、タイトル01
  2. モーダルで複数のフォームを表示するには、フォームのイベントか、フォームに追加したボタンなどに、もう一つのフォームを表示するコードを記入します。

    フォームを2つ以上表示する、タイトル02
  3. UserForm1にボタンを設置したので、こちらに以下のコードを書きます。

    フォームを2つ以上表示する、タイトル03
    Private Sub CommandButton1_Click()
        UserForm2.Show
    End Sub
    
  4. そして標準モジュールには、UserForm1を表示するコードを記述します。引数のvbModalは省略しても規定値なのでモーダルになります。

    Sub Form_Show_Modal()
        UserForm1.Show vbModal
    End Sub
    
  5. UserForm1を起動し、コマンドボタンをクリックすると、UserForm2が表示されます。

    フォームを2つ以上表示する、タイトル04

モードレスで複数表示する

  1. モードレスで複数のフォームを表示にする場合は、フォームの表示コードを、2つ続けて記述する方法があります。 まず、1つ目のフォーム表示をモードレスにします。UserForm2はモーダルです。

    フォームを2つ以上表示する、タイトル05
    Sub Form_Show_Modeless()
        UserForm1.Show vbModeless
        UserForm2.Show
    End Sub
    

    この場合は、UserForm1がモードレスなので、フォーカスがUserForm1にあるときは、シートやセルの操作ができます。

  2. また、シームレスに両方のフォームを行き来しながら操作するには、2つのフォームともモードレスにします。

    フォームを2つ以上表示する、タイトル06
    Sub Form_Show_ModelessW()
        UserForm1.Show vbModeless
        UserForm2.Show vbModeless
    End Sub
    

    この場合は、ユーザーフォームがどちらもモードレスです。どちらのフォームにフォーカスがあってもシート操作等ができます。

  3. コードに書かずに、ユーザーフォームのプロパティでモードレスに設定することもできます。

    フォームを2つ以上表示する、タイトル07