• 締切済み

Excel VBAのユーザーフォーム

Textboxや、Comboboxで、2バイト入力した時に、次のTextboxや、Comboboxに移動出来るような制御はありますか?2バイト以上入力出来ないような制御をしたいです。 Private Sub ComboBox1_Change() ComboBox2.SetFocus End Sub も考えたのですが、これだと何バイトでも入力出来るので、宜しくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 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)
回答No.2

何か ちょっと違うような感じですが・・・ 時間 または 分を入力するんですよね。 それなら、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)
回答No.1

「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

potara_ran
質問者

お礼

早速のご回答ありがとうございます。 「2バイト入力した時」というのは、Textboxや、Comboboxで入力すのは、それぞれ時間と、分なんです。なので、2バイト入力した時ということになります。説明が少なくてすみません。 ComboBox1に時間、ComboBox2に分となるように入力します。なので、2バイト入力した時に、次のComboboxに移動したいのです。

関連するQ&A