【エクセルVBA】テキストボックスでよく使う3つのイベントを使ってみよう


テキストボックス,アイキャッチ

皆様こんにちは、ノグチです。

ユーザーフォームを作成して、使ってみることを目標に、ユーザーフォームのプロパティやイベントを、連載形式でご紹介しています。

【エクセルVBA】テキストボックスのプロパティで入力を便利にしよう
エクセルのユーザーフォームを作って、使ってみることを目標に、フォームやコントロールのプロパティやイベントをご紹介しています。今回はテキストボックスのプロパティをいくつかご紹介しています。プロパティの設定によってユーザーフォームの使い勝手は大きく変わってきますよ!
今回は、テキストボックスのイベントをいくつかご紹介していきますよ。
スポンサーリンク

前回までのおさらい

前回までに作成したユーザーフォームがこちら。

ユーザーフォーム,オブジェクト名

前回の記事では、このフォームの上側のテキストボックスのプロパティを変更したのでした。

今回は、同じくフォーム上側のテキストボックスのイベントを使ってみましょう。

テキストボックスのイベント

テキストボックスにも、便利に使えるイベントが多く用意されています。

そのイベントの中で、使いどころが多そうな、EnterExitChangeの3つをご紹介します。

コントロールのイベントに対応したプロシージャをVBEで開く方法は、こちらの記事の「イベントに対応したイベントプロシージャを開く」でご紹介していますので、併せてご覧ください。

【エクセルVBA】Showメソッドでユーザーフォームをコマンドボタンから開いてみよう!
エクセルの便利機能、ユーザーフォームの作り方と使い方を、連載記事でご紹介しています。今回は、ユーザーフォームにラベルやテキストボックスといったコントロールを追加する方法と、作成したユーザーフォームをワークシートから呼び出す方法をご紹介しています。

Enterイベント:テキストボックスにフォーカスが当たるとき

まず、Enterイベントからいきましょう。

Enterイベントは、テキストボックスにフォーカスが当たったタイミングで実行されるイベントです。

ユーザーフォームが開いたとき、このEnterイベントがセットされているテキストボックスに最初にフォーカスがあたっている場合は、処理の順番をざっくり言うと、ユーザーフォームの読み込み、初期処理→フォーカスがあたっているコントロールのEnterイベントの処理、となります。

テキストボックスにフォーカスがあたったら背景色を変える

Enterイベントに、テキストボックスにフォーカスが当たったらテキストボックスの背景色を変える、という処理をセットしてみましょう。

テキストボックスの背景色は、BackColorプロパティを使って変えることができますよ。

コードはこちら。

Private Sub TextItem_Enter()
    With TextItem
        .BackColor = RGB(255, 0, 0)
    End With
End Sub

テキストボックスにフォーカスが当たったら、背景色を赤色に変える、というコードです。

実際に使ってみましょう。

ユーザーフォームを開いて、下のテキストボックスにあたっているフォーカスを、上のテキストボックスをクリックすることで移してみると…

イベント,enter

このように、背景色がプロパティで指定した色に変わっていますね。

Exitイベント:フォーカスがテキストボックスから外れる時

お次はExitイベント。

このイベントは、フォーカスがテキストボックスから外れる時に実行されるイベントです。

フォーカスが外れたら背景色を変える

Enterイベントでご紹介した、テキストボックスにフォーカスがあたったら背景色を変えるというイベントの逆を、このイベントでやってみましょう。

フォーカスが外れるタイミングで、テキストボックスの背景色をもとの色に戻す、というコードです。

Private Sub TextItem_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    With TextItem
        .BackColor = RGB(255, 255, 255)
    End With
End Sub

早速試してみましょう。

テキストボックスからフォーカスを外すと…

イベント,exit

この通り、背景色が元の白に戻っています。

テキストボックスに入力された値が指定した文字数かチェックする

テキストボックスに入力された値が、入力して欲しい形式になっているのか?をチェックするのも、このイベントが使えます。

このイベントには、引数Cancelがあります。

このCancelにTrueを指定すれば、フォーカスが次のコントロールに移ることをキャンセルさせることができます

例えば、テキストボックスに5文字以上を入力して欲しい場合、テキストボックスに入力された文字数が指定した数に満たない場合、メッセージを出して、テキストボックスからフォーカスが移動しないようにさせることもできます。

テキストボックスに入力された文字数が5文字以下だったら、メッセージを表示してイベントをキャンセルする=フォーカスを他のコントロールに移動させない、という処理だと、こんなコードになります。

Private Sub TextItem_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   
If Len(TextItem.Value) < 5 Then
    MsgBox "5文字以上で入力してください"
    Cancel = True
Else
    With TextItem
      .BackColor = RGB(255, 255, 255)
    End With
End If

End Sub

引数CancelにTrueを指定しても、イベントプロシージャ内の処理は一旦最後まで実行されますので、フォーカスが外れてよい場合の、背景色が変わる処理部分はIF文を使って分岐するようにしています。

実際にこの処理をさせてみましょう。

ユーザーフォームを開いて、テキストボックスに4文字入力します。

そして、次のテキストボックスにフォーカスを移そうとすると…

テキストボックス,exit

この通り、メッセージが表示されて、フォーカスがテキストボックスに残ったままになっていますね。

Changeイベント:テキストボックスの値が変更された時

Changeイベントは、テキストボックスの値が変更されたタイミングで実行されるイベントです。

キーボードでの文字入力はもちろん、Back spaceキーやDeleteキーでの文字の削除もこのイベントの対象になりますよ。

入力の都度文字数をフォーム上に表示してみる

このChangeイベントを使って、ユーザーフォーム上に入力されている文字列を、テキストボックスの値をそのまま表示させてみましょう。

フォームの右上に、「txtboxCopy」というラベルを追加して、そこにテキストボックスに入力された文字列を入力する都度表示させます。

コードはこちら。

Private Sub TextItem_Change()
    txtboxCopy.Caption = TextItem.Value
End Sub

そしてユーザーフォーム上で、テキストボックスに値を入力してみると…

テキストボックス,change

この通り、テキストボックスに値が入力される都度Changeイベントが実行されて、ラベルの文字列が更新されます。

使いどころは注意が必要

Changeイベントは、テキストボックスの値が変わったら実行されるとご紹介しました。

このイベント、テキストボックスの値が変わる都度実行されますので、メッセージを出すような処理はさせないのがよいでしょう。

というのもこのイベント、テキストボックスの値が変わる都度実行されますので、1文字入力したり文字を削除したりする都度メッセージが出てしまうことになって非常に鬱陶しいのです。

Changeイベントを使って何か処理をさせたい場合は、注意が必要ですね。

最後に

今回はテキストボックスにフォーカスが当たるときに実行されるEnterイベント、フォーカスが外れるときに実行されるExitイベント、値が変更された時に実行されるChangeイベントの3つをご紹介しました。

ユーザーフォームを作成するにあたって、このイベントを知ることは避けて通れません。

イベントが実行される条件やタイミングなど、「難しいのでは?」と思ってしまうかもしれませんが、わかってしまえばユーザーフォームでできることの幅がぐっと広がりますよ。

それでは、最後までお読みいただきありがとうございました!

連載目次:【エクセルVBA】ユーザーフォームを使ってみよう!

ユーザーフォームは、ちょっとした画面なら作れてしまう、便利な機能です。

何となく敷居が高いように感じてしまいますが、順を追っていけば難しいことはありませんよ。

  1. 【エクセルVBA】ユーザーフォームを作ってみよう!VBEでフォームを挿入する方法
  2. 【エクセルVBA】Showメソッドでユーザーフォームをコマンドボタンから開いてみよう!
  3. 【エクセルVBA】コマンドボタンのClickイベントとUnloadステートメントでユーザーフォームを閉じる方法
  4. 【エクセルVBA】テキストボックスのプロパティで入力を便利にしよう
  5. 【エクセルVBA】テキストボックスでよく使う3つのイベントを使ってみよう
  6. 【エクセルVBA】Initializeイベントでワークシートの値をユーザーフォームの初期値にセットする
  7. 【エクセルVBA】AfterUpdateイベントでテキストボックス同士を連動させてみよう
  8. 【エクセルVBA】コマンドボタンのClickイベントでワークシートを更新してみよう
  9. 【エクセルVBA】ユーザーフォームのリストボックスを使ってみよう!
  10. 【エクセルVBA】リストボックスのRowSourceプロパティの値を変動させてみよう!
  11. 【エクセルVBA】AddItemメソッドでリストボックスに値を追加してみよう!
  12. 【エクセルVBA】リストボックスのListプロパティで複数列の値を更新する
  13. 【エクセルVBA】ユーザーフォームにコンボボックスを追加する方法
  14. 【エクセルVBA】コンボボックスに値をセットする2つの方法 RowSourceプロパティとAddItemメソッド

 


タイトルとURLをコピーしました