教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】フォームを表示する直前に処理を実行する方法を教えて!

     f:id:m_kbou:20210118111701p:plain

フォームを表示する直前に処理を実行するには、フォームのInitializeイベントプロシージャを使用します。その使い方について説明します。

 

【目次】

 

構文

イベントプロシージャの記述方法は以下の通りです。

=======================================================

Private Sub [オブジェクト名]_Initialize()

   [実行する処理内容]

End Sub

=======================================================

[説明]:

フォームが表示される直前に処理を実行させるイベントプロシージャはInitializeプロシージャを使用します。[オブジェクト名]にはフォームのオブジェクト名を記述します。また、[実行する処理内容]にはフォームを表示する直前で実行する処理内容を記述します。内容を纏めると、「[オブジェクト名]で指定したフォームを表示する場合、事前に[実行する処理内容]を実行して下さい。」との意味になります。

[記述例]:

Private Sub UserForm_Initialize()
    TextBox1 = ""
    TextBox2 = ""
    ComboBox1.Clear
End Sub

[サンプル画面]: 

今回は以下の画面(サンプル画面)を使用して処理を実行する方法について説明します。
※サンプル画面の作成方法については、こちらを参考にして下さい。

f:id:m_kbou:20201127082632p:plain

サンプル画面の各コントロールのオブジェクト名は以下の内容となります。

f:id:m_kbou:20210118111735p:plain

 

Initializeイベントプロシージャの記述方法

(1)VBE(VBA記述画面)を開き、フォームにある上記のUserForm1フォームをダブルクリックします。

f:id:m_kbou:20210118111759p:plain

(2)UserForm1フォームが表示されるので、フォーム上の任意の場所で右クリックします。そうすると小窓が開くので、「コードの表示」を選択します。

f:id:m_kbou:20210118111821p:plain

※この時点で「UserForm_Click」イベントプロシージャが表示されます。(これは自動的に作成される仕組みとなっているようです)

f:id:m_kbou:20210118111843p:plain

(3)オブジェクトボックスの▼ボタンをクリックします。

f:id:m_kbou:20210118111916p:plain

(4)プルダウン一覧の中から「UserForm」を選択します。

f:id:m_kbou:20210118111941p:plain

(5)プロシージャボックスの▼ボタンをクリックします。

f:id:m_kbou:20210118112004p:plain

(6)プルダウン一覧の中から「Initialize」を選択します。

f:id:m_kbou:20210118112022p:plain

(7)「UserForm_Initialize」イベントプロシージャが表示されます。

※このUserForm_Initializeイベントプロシージャの中に実行する処理内容を記述する事で、フォームを表示する直前に処理を実行する事ができます。これ以降は実行する処理例について紹介します。

f:id:m_kbou:20210118112332p:plain

(例1)フォームの各コントロールをクリアする

フォームの各コントロールをクリアする記述は以下の通りとなります。

[記述例]:

-------------------------------------------------

Private Sub UserForm_Initialize()

    TextBox1 = ""
    TextBox2 = ""
    ComboBox1.Clear
       
End Sub

-------------------------------------------------

内容を説明すると、

「UserForm1フォームを表示する直前に、TextBox1(職番の右側にあるテキストボックス)、TextBox2(氏名の右側にあるテキストボックス)、ComboBox1(部署の右側にあるテキストボックス)をクリアして下さい。」

との意味になります。

f:id:m_kbou:20210118112050p:plain

[実行例]:

TextBox1(職番の右側にあるテキストボックス)、TextBox2(氏名の右側にあるテキストボックス)、ComboBox1(部署の右側にあるテキストボックス)がクリアされてフォームが表示されます。

f:id:m_kbou:20210118113305p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

(例2)フォームの各コントロールに初期値をセットする

フォームの各コントロールに初期値をセットする記述は以下の通りとなります。

[記述例]:

-------------------------------------------------

Private Sub UserForm_Initialize()

    TextBox1 = "職番を入力"
    TextBox2 = "氏名を入力"
    ComboBox1.AddItem "総務"
    ComboBox1.AddItem "経理"
    ComboBox1.AddItem "資材"
       
End Sub

-------------------------------------------------

内容を説明すると、

「UserForm1フォームを表示する直前に、TextBox1(職番の右側にあるテキストボックス)に”職番を入力”、TextBox2(氏名の右側にあるテキストボックス)に”氏名を入力”、ComboBox1(部署の右側にあるテキストボックス)に”総務・経理・資材”をセットして下さい。」

との意味になります。

f:id:m_kbou:20210118112206p:plain

[実行例]: 

TextBox1(職番の右側にあるテキストボックス)に”職番を入力”、TextBox2(氏名の右側にあるテキストボックス)に”氏名を入力”、ComboBox1(部署の右側にあるテキストボックス)に”総務・経理・資材”がセットされてフォームが表示されます。

f:id:m_kbou:20210118112225p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

(例3)フォームのボタンを非表示にする

フォームのボタンを非表示にする記述は以下の通りとなります。

[記述例]:

-------------------------------------------------

Private Sub UserForm_Initialize()

    CommandButton1.Visible = False
       
End Sub 

-------------------------------------------------

内容を説明すると、

「UserForm1フォームを表示する直前に、CommandButton1(<保存>ボタン)を非表示にして下さい。」

との意味になります。

f:id:m_kbou:20210118112246p:plain

[実行例]: 

CommandButton1(<保存>ボタン)が非表示となりフォームが表示されます。

f:id:m_kbou:20210118112305p:plain

[サンプル]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

Initializeイベントプロシージャの記述方法についての説明は以上です。

 

おわりに

今回はフォームを表示する直前に処理を実行する方法について説明しました。フォームを表示する直前に処理したい内容については、上記例以外にも多々あると思います。今回の説明を参考に活用してみて下さい。また、Initializeイベントと同じくらい使用頻度の高いイベントにActivateイベントがあります。各々の違いとしてInitializeイベントはフォームを表示する前に実行するイベントですが、Activateイベントはユーザーフォームがアクティブになった時に実行されるイベントです。混同されやすいので注意して下さい。