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

以上で
ユーザーフォームを操作する方法についての解説を終了します。
ありがとうございました。
ユーザーフォームのプロパティについてはこちらをご覧ください。
その他のユーザーフォームのイベントについてはこちらをご覧ください。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク