- 締切済み
Excel VBAのユーザーフォーム
Textboxや、Comboboxで、2バイト入力した時に、次のTextboxや、Comboboxに移動出来るような制御はありますか?2バイト以上入力出来ないような制御をしたいです。 Private Sub ComboBox1_Change() ComboBox2.SetFocus End Sub も考えたのですが、これだと何バイトでも入力出来るので、宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 IMEを使わないように、それぞれのコントロールのプロパティのIMEMode をIMEを起動しないようにします。(fmIMEModeOff) Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim ret As String If LenB(StrConv(ComboBox1.Value, vbFromUnicode)) >= 2 Then ComboBox2.SetFocus End If End Sub ただ、 >それぞれ時間と、分なんです。なので、2バイト入力した時ということになります。 一般的には、そのような設計はしません。入力したときに、IsDate等でチェックしますから、分割したら、時間であるのか、分からなくなりますし、入力の手間が増えてしまいます。 例えば「1:25」とか、一度で済みますし、文字のバイトをチェックにする必要がありません。(こちらも、IMEOff にします) Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then If IsDate(TextBox1.Value) Then MsgBox Format$(TextBox1.Value, "hh:mm") Else TextBox1.Value = "" KeyCode = 0 End If End If End Sub
- ja7awu
- ベストアンサー率62% (292/464)
何か ちょっと違うような感じですが・・・ 時間 または 分を入力するんですよね。 それなら、2バイトではなく 2文字 と違いますか? VBA では、Unicode(ユニコード)形式が使われていて、半角も全角も 1文字2バイトです。 時間や分を1文字で入力するのですか? 10(分)とかは、無いのですか? まぁ、推測すると 2文字らしいので、 そのときは、こんな感じで如何ですか。 ANK も 漢字 も 2文字限定です。 Private Sub TextBox1_Change() Dim St As String If LenB(Me.TextBox1.Value) >= 4 Then Me.TextBox1.Value = LeftB(Me.TextBox1.Value, 4) Me.TextBox2.SetFocus End If End Sub また、ANSI 形式の半角を1バイト、全角を2バイトとして 計2バイトというのであれば こんな感じです。 半角は 2文字 漢字は一文字限定です。 混在させ「1月」と入力すると「1」だけになり、「月」の左半分までにはならない・・・当然。 Private Sub TextBox1_Change() Dim St As String St = StrConv(Me.TextBox1.Value, vbFromUnicode) If LenB(St) >= 2 Then Me.TextBox1.Value = StrConv(LeftB(St, 2), vbUnicode) Me.TextBox2.SetFocus End If End Sub
- okormazd
- ベストアンサー率50% (1224/2412)
「2バイト入力した時」というと下記のようになると思うが、 ふつうはShft JISなら2バイトで1文字になるから、1文字入力したときと同じだ。バイトで入力する方法がわからない。 Private Sub ComboBox1_Change() b = LenB(ComboBox1.Text) If b = 2 Then MsgBox b ComboBox2.SetFocus End If End Sub
お礼
早速のご回答ありがとうございます。 「2バイト入力した時」というのは、Textboxや、Comboboxで入力すのは、それぞれ時間と、分なんです。なので、2バイト入力した時ということになります。説明が少なくてすみません。 ComboBox1に時間、ComboBox2に分となるように入力します。なので、2バイト入力した時に、次のComboboxに移動したいのです。