電子書籍の厳選無料作品が豊富!

下記の「エクセル VBA タブストップに対する質問」に書き込みした者ですが、一難去ってまた一難です。又、暗雲が漂ってきました。
条件は下記といっしょで
テキストボックスが1~5まであり、テキストボックス2~4まではデータが入っています。
全てのTabStopはTrue、TabIndexは順に1~5が入っています。
テキストボックス1に何もデータを入れないで、Enterが押された場合、
テキストボックス1をアクティブにしたいのですが、下記で質問した回答で動かしても、きちんと動いてくれません。
どうかご指導よろしくお願いいたします。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then 'ENTER
If TextBox1.Value = "" Then
TextBox1.SetFocus
End If
End If
End Sub

このコードでテキストボックス1に何も入れずにEnterを押すとテキストボックス2がアクティブになってしまいます。

A 回答 (3件)

KeyDownでKeyCodeを適切な値に変更しないのが原因でしょう



Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then 'ENTER
    If TextBox1.Value = "" Then
      KeyCode = 0 ' デフォルトの処理をさせなくないなら
      ' TextBox1.SetFocus ' これも必要ないです
    End If
  End If
End Sub
    • good
    • 0
この回答へのお礼

回答、有難うございます。
pkh4989先生のコードでも良かったのですが、以前、ユーザーフォームの「Hide」と「Unload」と「Show」の組み合わせで、オートメーションエラーが出て、かなり悩まされましたので、正直、あまり使いたくありませんでした。
これからもご指導よろしくお願いいたします。
有難うございました。

お礼日時:2008/10/07 23:17

Exitイベントで処理すればいいのでは …



Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Text = "" Then
Cancel = True
End If
End Sub
とすれば TABキーでもEnterキーでもマウスのクリックでも移動できません
    • good
    • 0
この回答へのお礼

回答、有難うございます。
Exitイベントは勉強不足で、まだ一度も使ったことがありません。
こういう使い方があるのかと、勉強になりました。
以前組んだプログラムにテキストボックスにデータを入れないと先に進めないようする。というのがあったような記憶があるのですが、このコードでもOKと思います。
しかし、今回はマウスをクリックしても動かないという事が致命的なのでNGでした。
又、何かあれば、よろしくお願いいたします。

お礼日時:2008/10/07 21:26

お早うございます。


良い方法が見つからないので、取りあえず、以下のようにしてみてください。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  If KeyCode = 13 Then 'ENTER
    If TextBox1.Value = "" Then
      UserForm1.Hide   '←追加
      TextBox1.SetFocus
      UserForm1.Show   '←追加
    End If
  End If
End Sub
    • good
    • 0
この回答へのお礼

回答、有難うございます。このコードで、きちんと動きました。
今回の質問は調べるにも、どう調べれば良いか解らなかったので、すごく助かりました。
又、何か解らないことがあれば、よろしくお願いいたします。

お礼日時:2008/10/07 21:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!