2010年11月11日

UserFormsオブジェクト3.TextBox

テキストボックスコントロール[ TextBox* ]

 テキストボックスコントロール[ TextBox ]は、値をユーザーに伝える役割も担いますが、キーボードから入力される値を受け取るのに、欠かせないコントロールです。時には、入力された値を判定し、VBAマクロの動作を分岐したり、入力を受け付けなくしたりして、テキストボックスコントロールのプロパティを通じて、ユーザーに操作を促すこともあります。

  • [ TextBox1 ]は、10文字以上の入力があると、値を[ TextBox2 ]へ移動
    Private Sub TextBox1_Change()
      If Len(TextBox1) >= 10 Then TextBox2 = TextBox1: TextBox1 = Empty
    End Sub
     
    [ TextBox2.SetFocus ]と[ SetFocusメソッド ]を付け足して、フォーカスも一緒に移動することもできます。このコードは、[ TextBox1 ]の値が変わるたびに実行[ Changeイベント ]されるので、ユーザーの入力が終了したときに、初めて実行する方法は無いのでしょうか。
     
  • タブやマウスの移動などで、[ TextBox1 ]からフォーカスが移動すると実行
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      TextBox2 = TextBox1: TextBox1 = Empty
    End Sub
     
    [ TextBox1 ]の[ Exitイベント ]で実行されるマクロになります。
     
  • タブやマウスの移動などで、[ TextBox2 ]にフォーカスが移る直前に実行
    Private Sub TextBox2_Enter()
      TextBox2 = TextBox1: TextBox1 = Empty
    End Sub
     
    [ TextBox2 ]の[ Enterイベント ]を使って、[ TextBox1 ]の[ Exitイベント ]と同じ動作を行ってみました。マクロの結果や意味合いが、同じようにも思えるのですが、[ Exitイベント ]には何やら長ったらしい引数(ByVal Cancel As MSForms.ReturnBoolean)があります。
     
  • 値の決定(Enterキー押下)時に、値を[ TextBox2 ]に移すが、フォーカスは移動しない
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = True
      TextBox2 = TextBox1: TextBox1 = Empty
    End Sub
     
    ユーザーフォームは、[ MsgBox関数 ]や[ InputBoxメソッド ]と異なり、複数のラベルやテキストボックス、コマンドボタンやリストボックスを配置して使用します。その分、[ TextBox1 ]へ入力したら[ CommandButton1 ]を押して、[ ListBox1 ]のリスト項目の中から1つを選択して・・・と、コントロールのフォーカスや位置、操作手順と共にユーザーの視点も移動します。この[ Exitイベント ]では、[ Cancel引数 ]へ値[ True ]を渡して、フォーカスが[ TextBox2 ]へ移動しないようにしています。[ Exitイベント ]は、時として問題が起きるイベントでもあります。
     
  • [ TextBox1 ]の入力値を表示中ワークシートの、アクティブセルに入力する
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = True
      ActiveCell.Value = TextBox1: TextBox1 = Empty
    End Sub
     
    小さめの[ UserForm* ]なら、ユーザーフォームの後ろに、ワークシートが見えますね。[ TextBox1 ]へ何かしらの文字を入力し、[ Enterキー ]を押すと、テキストボックスに入力した値が、セルに移動したように入力されます。ほっと安心して、ユーザーフォームを閉じると、セルの値は、空になってしまいます。
     
    これは、ユーザーフォームが閉じられる瞬間、先に[ TextBox1 ]の[ Exitイベント ]が発生します。[ TextBox1 ]の値は、[ Enterキー ]を押した後で空になっているため、アクティブセルへ代入されるのは、空のデータになるからです。
     
    ユーザーフォームを閉じると、値が変わるので困っているときは、このあたりのチェックもしておきたいですね。
posted by くきお at 11:11| Comment(0) | UserFormオブジェクト | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。