- ベストアンサー
VBAでのユーザーフォーム上でのタブオーダーの移動の方法
やりたい事を以下に書きます。 ユーザーフォームで入力用のTEXTBOXがいくつかあり、TABINDEXが最初のTEXTBOXから順に入力していきます。 1つのTEXTBOXに入力完了後した場合、TABキーまたは、ENTERにより次のTEXTBOXにフォーカスが移動し、最後にコマンドボタンにを押すと入力が完了するというフォームを作っています。 ただし、最初のTEXTBOXに『99』を入力すると、途中のTEXTBOXへのフォーカスの移動はしないで最後のコマンドボタンにフォーカスが移動するようにしたいと考えています。 問題点を以下に書きます。 TEXTBOXの入力完了を現在、「AfterUpdate」イベントでつかまえて、TEXTBOXの値を取得し、その値が『99』だった場合、コマンドボタンにフォーカスを移動するようにコーディングしています。 こんな感じです。(かなり省略していますが、) Private Sub TextBox1_AfterUpdate() If TextBox1.Value = "99" Then CommandButton1.SetFocus Exit Sub End If End Sub この用にコーディングすると、TABINDEXが二つ後ろのTEXTBOXが入力待ち状態となってしまいます。 たとえば TEXTBOXが3つコマンドボタンが1つのフォームだと、 TEXTBOX1に『99』と入力し、上記のコーディングだと一度コマンドボタンにフォーカスが移動したあと、最後にTEXTBOX3にフォーカスが移動して入力待ち状態となる感じです。 色々試しましたが、解決方法が見つかりません。知っている方いましたら、教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 999とか入れる事がなければ、Changeが簡単ですね。 Private Sub TextBox1_Change() If TextBox1.Text = "99" Then CommandButton1.SetFocus End Sub 999も考慮すると、こんな感じでしょうか? Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 And TextBox1.Value = "99" Then CommandButton1.SetFocus End If End Sub Excel97で確認しました。
その他の回答 (2)
- eipu
- ベストアンサー率39% (25/64)
Private Sub TextBox1_Change() に書いたんじゃ駄目ですか?
お礼
ありがとうございます。 Changeに書くのは試していますが、やはりこのTEXTに入力されるコードが1~2桁であるため、『9』と入力されたときもイベントが発生してしまうのが問題になるので使えませんでした。 回答ありがとうございました。
- PAPA0427
- ベストアンサー率22% (559/2488)
残りのテキストボックスに入力が必要ないのであれば、残りのテキストボックスをのTEXT.Enabled = Falseとしてみてください。 もちろんタイミングを見て、Enabled = Trueに戻してくださいね。
お礼
回答ありがとうございます。 確かに上記の方法でうまく行きますね。 現在作成中のフォームの仕様上も『99』を入力した場合は、終了という意味なので、他のTEXTは入力が規制されても良いかと思います。 他にも方法がないか、他の皆さんの回答も待ってみます。 ありがとうございました。
お礼
ありがとうございます。 うまく行きそうですね。 他の部分との関係もあるので、参考にして試してみます。 回答ありがとうございました。