教えて!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: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イベントはユーザーフォームがアクティブになった時に実行されるイベントです。混同されやすいので注意して下さい。