• 締切済み

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

  • Excel ユーザーフォーム呼び出し時エラー

    WindowsVista HomePremium Excel 2007 Microsoft Visual Basic 6.5 です。 Excelでユーザーフォーム(UserForm1)を作り、   Sub Auto_Open()     UserForm1.Show   End Sub で起動時に呼び出すようにしました。 確認のため、一度Excelを閉じ起動し直したところ正常に動作しました。 もう一度確認のため同じように再起動をすると、  実行時エラー '2110': コントロールが表示されていない、利用できない、またはフォーカスを持てないため、そのコントロールにフォーカスを移すことはできません。 と出て、それ以降何度やっても動作しなくなってしまいました。 解決法か原因がわかる方いらっしゃいましたら、ぜひご教授ください。よろしくおねがいします。 ユーザーフォーム関係のコードを以下に書いておきます。(内容は小遣い帳のようなものです。) ―――――――――――――――――――― Private Sub CommandButton1_Click() Dim NUM As Integer If TextBox1.Text = "" Then MsgBox "概要が記入されていません。" TextBox1.SetFocus GoTo 100 ElseIf TextBox2.Text = "" Then MsgBox "収支が記入されていません。" TextBox2.SetFocus GoTo 100 ElseIf ComboBox1.ListIndex = -1 Then MsgBox "収支の種類が選択されていません。" ComboBox1.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = TextBox1.Value If CheckBox1 = True Then TextBox2 = -TextBox2 End If If ComboBox1.ListIndex = 0 Or ComboBox1.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox1.ListIndex + 1) = TextBox2.Value Else ActiveCell.Offset(0, ComboBox1.ListIndex + 2) = TextBox2.Value End If TextBox1 = "" TextBox2 = "" CheckBox = Falses ComboBox1.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton2_Click() Dim NUM As Integer If TextBox3.Text = "" Then MsgBox "移動金額が記入されていません。" TextBox3.SetFocus GoTo 100 ElseIf ComboBox2.Text = "" Then MsgBox "移動元が選択されていません。" ComboBox2.SetFocus GoTo 100 ElseIf ComboBox3.ListIndex = -1 Then MsgBox "移動先が選択されていません。" ComboBox3.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = "移動" If ComboBox2.ListIndex = 0 Or ComboBox2.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox2.ListIndex + 1) = -TextBox3.Value Else ActiveCell.Offset(0, ComboBox2.ListIndex + 2) = -TextBox3.Value End If If ComboBox3.ListIndex = 0 Or ComboBox3.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox3.ListIndex + 1) = TextBox3.Value Else ActiveCell.Offset(0, ComboBox3.ListIndex + 2) = TextBox3.Value End If TextBox3 = "" ComboBox2.ListIndex = -1 ComboBox3.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton3_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub CommandButton4_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub UserForm_Initialize() myarray1 = Array("収支", "クレジット", "郵便局", "机", "500", "1") For i = 0 To 5 ComboBox1.AddItem myarray1(i) ComboBox2.AddItem myarray1(i) ComboBox3.AddItem myarray1(i) Next i TextBox1.SetFocus End Sub

  • エクセル VBA ID入力について

    TextBox2に数字をIDを入力して 名前をComboBox1.Text に表示させるようにしました。 しかし、数字入力すると認識される物もあるのですが 表示されない=数字の値は同じ数字 なぜなのでしょうか? Private Sub TextBox2_Change() Dim vRet As Variant vRet = Application.VLookup(TextBox2.Text, _ Sheets("マスタ").Range("A:B"), _ 2, _ False) If VarType(vRet) <> vbError Then ComboBox1.Text = vRet Else ComboBox1.Text = "<< 該当なし >>" End If End Sub Private Sub UserForm_Initialize() With TextBox2 .SetFocus .Text = "ID入力"  .SelLength = Len(.Text) End With 教えて下さい!Sheet2の数字の書式が問題なのでしょうか?

  • VBA ユーザーフォームのコードについて

    下記の2つのコードの意味について教えて下さい。 Private Sub CommandButton1_Click() If ComboBox1 = "" Then ComboBox1.SetFocus・・・・・1 Exit Sub End If Application.Run (ComboBox1.List(ComboBox1.ListIndex))・・・2 End Sub 1と2がわかりません。 Private Sub UserForm_Initialize() TB = Array("マクロ1", "マクロ2", "マクロ3") Me.ComboBox1.List = TB End Sub 「Private Sub UserForm_Initialize()」と「Array」がわかりません。 よろしくお願いします。

  • エクセルVBAでユーザーフォームのテキストボックス

    ユーザーフォーム上にテキストボックスを8個設置しました。 そこに数値が入力された場合は自動的にカンマ区切りが表示されるように以下のコードを書きました。 これで希望の動きはしてくれるのですが、このやりかたは正しいでしょうか? また、テキストボックスは8個あるので、それぞれに下記のように8通りコードをかかなければいけないのでしょうか?ご教示ください。 Private Sub TextBox1_Change()   If IsNumeric(TextBox1.Value) Then Application.EnableEvents=False     TextBox1.Text = Format(TextBox1.Value, "#,##0") Application.EnableEvents=True   End If End Sub 途中(2~7)略 Private Sub TextBox8_Change()   If IsNumeric(TextBox8.Value) Then Application.EnableEvents=False     TextBox8.Text = Format(TextBox8.Value, "#,##0") Application.EnableEvents=True   End If End Sub

  • ユーザーフォームの内容が一部だけ残らない。

    VBAを始めてまだ1週間ほどなのでどの部分を変えればよいのかわかりません。 どなたかわかる方が居れば回答をお願いします。 問題:下記の構文でTextBox2の内容だけが残らない。 UserFoem1で記入場所が7つあり、ボタン1(入力)を押すと 7つの内容がSheet(履歴表)に転記されます。 ボタン2(終了)を押すとUserFormが消えます。 そして転記された後、内容をそのまま7つのTextBoxに残したいと思っています。 TextBox1(txtDate)日付を自動で表示して、 TextBox3~7までは転記後も内容は残るのですが、 TextBox2の内容だけが残らないのです。 下記の構文はネット上でいろんな方のものをコピペして製作したので、 訳の分からない文字がたくさんあり理解をしていない部分はあります。 ですので回答をいただけるならTextBox2の問題解決と 下記の内容をもっとスマートな形に変えて 不要な部分を削除して頂けたらと思っています。 宜しくお願い致します。 Sub ユーザーフォームで履歴表へ入力する() End Sub Private Sub CommandButton1_Click() Dim n As Long With Worksheets("履歴表") n = .Range("B" & Rows.Count).End(xlUp).Row  'Bの一番下を検索する Cells(n + 1, 2).Value = txtDate.Value    'テキストボックス2に自動で日付を入れてB列へ Cells(n + 1, 3).Value = TextBox2.Value 'C列へ代入 Cells(n + 1, 4).Value = TextBox3.Value 'D列へ代入 Cells(n + 1, 5).Value = TextBox4.Value 'E列へ代入 Cells(n + 1, 6).Value = TextBox5.Value 'F列へ代入 Cells(n + 1, 7).Value = TextBox6.Value 'G列へ代入 Cells(n + 1, 8).Value = TextBox7.Value 'H列へ代入 Range(Cells(n + 1, 2), Cells(n + 1, 2)).Offset(, -1).Value = Range(Cells(n + 1, 2), Cells(n + 1, 2)).Row - 4   'A列に番号を順番に入れる End With TextBox2.Value = "" TextBox2.SetFocus End Sub Private Sub TextBox2_Change() '商品名 End Sub Private Sub TextBox3_Change() '型式・形式 End Sub Private Sub TextBox4_Change() '数量 End Sub Private Sub TextBox5_Change() '客先 End Sub Private Sub TextBox6_Change() '担当 End Sub Private Sub TextBox7_Change() '備考 End Sub Private Sub txtDate_Change() End Sub Private Sub UserForm_Click() End Sub Private Sub UserForm_Initialize() UserForm1.txtDate.Value = Date End Sub Private Sub CommandButton2_Click() Me.Hide End Sub

  • エクセルVBAのユーザーフォームでのチェックボックス

    PCでエクセル2003です シートのC列に0か1を表示したいのです。 いまのままではTUREかFALSEになってしまいます。 また、コマンドボタンで行を上下させるとチェックボックスのレ点も反映させたいのです。 あと、ボタンを押すたびにシート上も行がアクティブ(選択状態→A列を選択)になるにはどうすればいいのでしょうか? 上下移動のコマンドボタンに 下の関数をつけたらエラーが出て出来ませんでした Cells(1, myRowN).Select あとTEXTBOX3にはA列の行番号付けてるのを取得してますが、アクセスのレコードの様に数字を入力するとその行に飛ぶことって可能でしょうか? 具体的な関数は Private Sub UserForm_Initialize() myRowN = Worksheets("元").Range("a65536").End(xlUp).Row Call ChangeMe(myRowN) End Sub Private Sub CommandButton4_Click() '下に移動 If myRowN <= 65535 Then myRowN = myRowN + 1 Call ChangeMe(myRowN) End If 'Cells(1, myRowN).Select TEXTBOX1.SetFocus End Sub Private Sub CommandButton3_Click() '上に移動 If myRowN >= 3 Then myRowN = myRowN - 1 Call ChangeMe(myRowN) End If 'Cells(1, myRowN).Select TEXTBOX1.SetFocus End Sub Private Sub ChangeMe(lngRowNum As Long) TEXTBOX1.ControlSource = "B" & myRowN TEXTBOX2.ControlSource = "C" & myRowN   CHECKBOX1.ControlSource = "D" & myRowN   TEXTBOX3.ControlSource = "A" & myRowN End Sub 非常に長々と申し訳ありません、フォーム等に詳しい方がいらっしゃればお教え願えないでしょうか?

  • ユーザーフォームのSetFocusが働かない?

    エクセルのユーザーフォームにtextboxが2つとCommandButtonが2つ配置しています。 textbox1に入力されるのを10以下に限定するため、それ以上の数字が入力されるとExit時にエラーを表示し、textbox1にフォーカスを戻したいのです。 ですが、以下のようにするとエラー時にはtextbox2も飛ばしてCommandButton1にフォーカスされます。 どのようにするのが正解なのでしょうか。 よろしくお願いします。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If CInt(TextBox1.Text) > 10 Then MsgBox ("ダメ") TextBox1.SetFocus End If End Sub

  • エクセル ユーザーフォームで

    ユーザーフォームのテキストボックスの中にセルA1を表示させたい場合はどうすればいいのでしょうか? 「Private Sub TextBox1_Change() End Sub」 の中に何かを入れるのでしょうか? よろしくお願いします。

  • excel VBA コンボボックスでシート選択後エラー

    どなたかご教授願います。 ユーザーフォームにコンボボックスを配置し、ブック内のシートすべて選択できるようにしてます。選択後シートに移動するのですが、同じユーザーフォームのテキストボックス等に入力した後、コマンドボタンをクリックするとエラーとなります。しかしテキストボックス等の値は間違いなく入力されています。よろしくお願いします。 Private Sub ComboBox1_Change() → Sheets(Me.ComboBox1.Value).Select       この部分が黄色になってしまいます End Sub Private Sub CommandButton1_Click() Dim myRow As Long ActiveSheet.Select myRow = Range("B65536").End(xlUp).Offset(1, 0).Row '各テキストボックの値をセルに入力 Cells(myRow, 2).Value = TextBox1.Value Cells(myRow, 3).Value = TextBox1.Value Cells(myRow, 4).Value = ComboBox2.Value Cells(myRow, 6).Value = TextBox2.Value Cells(myRow, 7).Value = TextBox3.Value Cells(myRow, 8).Value = TextBox4.Value 'Cells(myRow, 9).Value = TextBox5.Value '書式設定 Cells(myRow, 2).NumberFormatLocal = "m" Cells(myRow, 3).NumberFormatLocal = "dd" Cells(myRow, 6).NumberFormatLocal = "#,###" 'セルに入力が各テキストボックの値をクリア ComboBox1.Value = "" ComboBox2.Value = "" TextBox2.Value = "" TextBox3.Value = "" TextBox4.Value = "" 'フォーカス移動 ComboBox2.SetFocus End Sub

  • ユーザーフォームのカーソル移動

    Excelのマクロでカーソル移動の事で教えて下さい。 フォームを表示するとTextBox1にカーソルが表示されます。 TextBox1で入力の判断しNG場合 カーソルを移動せずTextBox1に表示したいのですが CommandButton1に移動してしまいます。 (SetFocusでTextBox1を指定してNG) 【フォームの内容です】 TextBox1が1個 CommandButtonが2個存在します。 TextBox1のTabIndexは 0 CommandButton1のTabIndexは 1 CommandButton2のTabIndexは 2 【プログラムです】 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox1 = "" Then MsgBox "NG"     TextBox1.SetFocus End If End Sub 宜しくお願い致します。

専門家に質問してみよう