こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Excel VBAのユーザーフォーム

Textboxや、Comboboxで、2バイト入力した時に、次のTextboxや、Comboboxに移動出来るような制御はありますか?2バイト以上入力出来ないような制御をしたいです。

Private Sub ComboBox1_Change()
ComboBox2.SetFocus
End Sub

も考えたのですが、これだと何バイトでも入力出来るので、宜しくお願いします。

投稿日時 - 2009-01-10 13:14:28

QNo.4618783

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

投稿日時 - 2009-01-10 16:45:27

ANo.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

投稿日時 - 2009-01-10 16:27:45

ANo.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

投稿日時 - 2009-01-10 14:12:53

お礼

早速のご回答ありがとうございます。

「2バイト入力した時」というのは、Textboxや、Comboboxで入力すのは、それぞれ時間と、分なんです。なので、2バイト入力した時ということになります。説明が少なくてすみません。

ComboBox1に時間、ComboBox2に分となるように入力します。なので、2バイト入力した時に、次のComboboxに移動したいのです。

投稿日時 - 2009-01-10 14:47:05

あなたにオススメの質問