Excel VBA ユーザーフォームを操作する

スポンサーリンク

ユーザーフォーム操作する主なメソッド・ステートメント一覧表

メソッド・ステートメント内容
Show【ショウ】メソッドユーザーフォームを表示します。
Load【ロード】ステートメント表示しないでメモリに読み込みます。
Unload【アンロード】ステートメントユーザーフォームを閉じます。
Hide【ハイド】メソッドユーザーフォームを非表示にします。

ユーザーフォーム主なイベント

イベント内容
Initialize
【イニシャライズ】
ユーザーフォームがメモリに読み込まれたあと
画面に表示される直前に発生します。
QueryClose
【クエリクローズ】
ユーザーフォームを閉じる直前に発生します。

Show【ショウ】メソッド

ユーザフォームを表示するには、UserForm(ユーザフォーム】コントロールオブジェクトのShow【ショウ】メソッドを使用します。

Show【ショウ】メソッドの書式と設定値

オブジェクト.Show( Modal )

  • オブジェクト(必須)
    ユーザーフォームコントロールオブジェクトのオブジェクト名を指定します。
  • Modal【モーダル】(省略可)
    ユーザーフォームの表示状態をFormShowConstants列挙型の定数で指定します。

    FormShowConstants列挙型の定数
    設定値内容
    vbModal1モーダルの状態で表示(既定値)
    vbModeless0モードレスの状態で表示

モーダルとは

モーダルとは、ユーザーフォームが表示されているとき、ユーザーフォーム以外の操作ができない状態のことです。したがって、モーダルに設定した場合は、そのほかのExcelの機能が操作できなくなります。ユーザーにユーザーフォーム以外の操作をさせたくないときにモーダルに設定します。

モードレスとは

モードレスとは、ユーザーフォームが表示されているとき、ユーザーフォーム以外の操作もできる状態のことです。したがって、モードレスに設定した場合は、そのほかのExcelの機能も操作できます。ユーザーフォーム内の操作とExcelの機能を連携させながら操作させたいときにモードレスに設定します。


※モーダルのユーザーフォームを表示しているときに、モードレスのユーザーフォームを表示しようとるすとエラーが発生します。

※選択されたセル範囲のアドレスを取得するRefEdit【リフエディット】コントロールを配置したユーザーフォームをモードレスに設定して表示するとユーザーフォームを閉じることできなくなります。


ユーザーフォーム1をモーダルで表示するコード例

Sub ユーザーフォーム表示()
    UserForm1.Show
End Sub

ユーザーフォーム1をモードレスで表示するコード例

Sub ユーザーフォーム表示()
    UserForm1.Show vbModeless
End Sub

Load【ロード】ステートメント

ユーザーフォームを表示しないでメモリに読み込むには、Load【ロード】ステートメントを使用します。

メモリに読み込んだユーザーフォームを表示するには、Show【ショウ】メソッドを使用します。
このとき、ユーザーフォームはすでにメモリに読み込まれているので表示する処理だけが実行されます。

ユーザーフォーム1をメモリに読み込むコード例

Sub ユーザーフォーム読み込み()
   Load UserForm1
End Sub

Unload【アンロード】ステートメント

ユーザーフォームを閉じるには、Unload【アンロード】ステートメントを使用します。Unload【アンロード】ステートメント実行するとユーザーフォームを閉じたあと、ユーザーフォームがメモリから削除されます。

Unload【アンロード】ステートメントの書式と設定値の説明

Unload オブジェクト

  • オブジェクト(必須)
    ユーザーフォームのオブジェクト名を指定します。または、オブジェクトが自分自身を参照するMe【ミー】キーワードを指定します。

Me【ミー】キーワードとは

Me【ミー】キーワードは、オブジェクトが自分自身を参照するキーワードです。

例えば、UserForm1のコードウィンドウ内で、Meキーワードを記述するとMeキーワードはUserFrom1を参照します。

UserFrom1を閉じるコードと解説

Private Sub CommandButton1_Click()
Dim 選択 As Integer
    選択 = MsgBox("フォームを閉じます。", vbQuestion + vbOKCancel)
If 選択 = vbOK Then
   Unload Me
End If
End Sub
1行目【Private Sub CommandButton1_Click()】
ユーザーフォームコントロールにユーザーフォームを閉じるためのコマンドボタンを追加して
コマンドボタンをクリックしたときに発生するClick【クリック】イベントプロシージャにコードを記述します。


2行目【Dim 選択 As Integer】
MsgBox関数の第2引数Buttons【ボタンズ】からの戻り値の値(Okボタンが押されたかCancelがおされたか)を格納する変数「選択」を整数型(Integer)で宣言します。


3行目【選択 = MsgBox(“フォームを閉じます。”, vbQuestion + vbOKCancel)】
MsgBox関数を使用してユーザーにメッセージを表示します。第2引数Buttons【ボタンズ】に
問い合わせメッセージアイコンを表すvbQuestion【ブイビークエッション】と「OK」ボタンと「キャンセル」ボタンを表すvbOKCancel【ブイビーオッケーキャンセル】を設定します。

クリックしたボタンの戻り値があるので、引数はカッコで囲み、戻り値を変数「選択」に代入します。


4行目【If 選択 = vbOK Then】
If【イフ】ステートメントを使用して、条件分岐します。MsgBox関数の戻り値が格納されている
変数「選択」がvbOk(値が1)のときを定義します。


5行目【Unload Me】
上記の条件分岐が成立したとき、つまり、MsgBox関数で「Ok」ボタンをクリックしたとき
Unload【アンロード】ステートメントでMe【ミー】キーワードで参照しているUserForm【ユーザフォーム】コントロールを閉じます。


実行結果


Hide【ハイド】メソッド

ユーザーフォームを非表示にするには、Hide【ハイド】メソッドを使用します。

ユーザーフォーム(UserForm1)上のコマンドボタン(CommandButton1)をクリックしたときにUserForm1を非表示にする場合は以下のように記述します。

コード例

Private Sub CommandButton2_Click()
       UserForm1.Hide
End Sub

Hide【ハイド】メソッドを実行した場合、ユーザーフォームはメモリからは削除されません。
表示しないユーザーフォームはUnload【アンロード】ステートメントを使用してメモリから削除しておきましょう。


Initialize【イニシャライズ】イベント

Initialize【イニシャライズ】イベントは、ユーザーフォームがメモリに読み込まれたあと、画面に表示される直前に発生するイベントです。

Initialize【イニシャライズ】イベントプロシージャーを使用すると、ユーザーフォームやユーザーフォームに設置されたコントロールなどの初期状態を設定することができます。

Initialize【イニシャライズ】イベントのコード例リンク

コンボボックスにリストを設定する 選択された値を取得する


QueryClose【クエリクローズ】イベント

ユーザーフォームを閉じる直前には、QueryClose【クエリクローズ】イベントが発生します。

イベントが発生したときに実行されるQueryClose【クエリクローズ】イベントプロシージャーを使用すると、ユーザフォームを閉じる直前の動作を設定することができます。

QueryClose【クエリクローズ】イベントプロシージャーを作成する手順



QueryClose【クエリクローズ】イベントプロシージャの書式と引数の説明

Private Sub UserForm_QueryClose( Cancel As Integer CloseMode As Integer )

  • Cancel 【キャンセル】
    QueryClose【クエリクローズ】イベントプロシージャ内で、引数Cancel【キャンセル】にTrueを設定するとユーザーフォームを閉じる処理をキャンセルします。
  • CloseMode【クローズモード】
    引数CloseMode【クローズモード】には、ユーザーフォームを閉じようとした方法によってvbQueryClose列挙型の定数が格納されています。

    vbQueryClose列挙型
    定数内容
    vbFormControlMenu0フォーム右上スミの「✕」をクリックして閉じようとした。
    vbFormCode1コードを使用して閉じようとした。

フォーム右上スミの「✕」でフォームを閉じられなくするコード例

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = vbFormControlMenu Then
           MsgBox "キャンセルボタンで閉じてください。"
           Cancel = True
       End If
End Sub

以上で、ユーザーフォームを操作する方法についての解説を終了します。ありがとうございました。

ユーザーフォームのプロパティについてはこちらをご覧ください。

その他のユーザーフォームのイベントについてはこちらをご覧ください。

スポンサーリンク

関連記事・広告