教えて!ExcelVBA!

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

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

f:id:m_kbou:20210118111701p:plain

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

 

 

構文

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

Private Sub[オブジェクト名]_Initialize()
  [実行する処理内容]
End Sub

[説明]:

フォームが表示される直前に実行されるイベントプロシージャです。

[オブジェクト名] フォームに付けた名前(オブジェクト名)を記述します。
[実行する処理内容] イベントが実行された時に処理する内容を記述します。

[記述例]:

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

[サンプルフォーム]: 

今回は以下のサンプルフォームを使用して説明します。(※フォームの作り方についてはこちらを参考にして下さい。)

f:id:m_kbou:20210118111735p:plain

 

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

(1)VBE(VBA記述画面)を開き、フォームにあるUserForm1フォームを開きます。(※VBEの開き方についてはこちらを参考にして下さい。)

f:id:m_kbou:20210519183608p:plain

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

f:id:m_kbou:20210519183633p:plain

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

f:id:m_kbou:20210519183650p:plain

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

f:id:m_kbou:20210519183706p:plain

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

f:id:m_kbou:20210519183728p:plain

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

f:id:m_kbou:20210519183749p:plain

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

f:id:m_kbou:20210519183806p:plain

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

f:id:m_kbou:20210519183826p:plain

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

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

[プログラミング例①]:

Private Sub UserForm_Initialize()

  TextBox1 = ""
  TextBox2 = ""
  ComboBox1.Clear

End Sub

内容を説明すると、

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

との意味になります。

f:id:m_kbou:20210519183847p:plain

[実行例①]:

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

f:id:m_kbou:20210118113305p:plain

[サンプル①]:

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

drive.google.com

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

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

[プログラミング例②]:

Private Sub UserForm_Initialize()

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

End Sub

内容を説明すると、

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

との意味になります。

f:id:m_kbou:20210519183908p:plain

[実行例②]: 

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

f:id:m_kbou:20210118112225p:plain

[サンプル②]:

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

drive.google.com

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

フォームのボタンを非表示にするプログラミングは以下の通りとなります。

[プログラミング例③]:

Private Sub UserForm_Initialize()

  CommandButton1.Visible = False

End Sub

内容を説明すると、

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

との意味になります。

f:id:m_kbou:20210519183926p:plain

[実行例③]: 

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

f:id:m_kbou:20210118112305p:plain

[サンプル③]:

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

drive.google.com

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

 

おわりに

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