• ベストアンサー

Userformの入力順序をタブオーダーでなく、VBAで指定したい。

ExcelVBAでUserformを作成しているのですが、入力順序をタブオーダーではなく、VBAの中で指定したいのです。  なぜタブオーダーではダメかと言いますと、IF文などの条件分岐で、その都度、入力順序を変化させたいのです。   Userform1.TextBox1.TabIndex=0 Userform1.Show  と書いたら指定できるかなと思ったのですが、うまくいきません。 入力順序を指定するのはTabIndexを使うのではないかと思うのですが、上記ではなぜうまくいかないのでしょうか。  どのように書けばうまくいくのでしょうか。  よろしくご指導願います。  

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

takaandhiroさん、こんばんは。 Private Sub TextBox1_Change() if XX=1 then    TextBox2.SetFocus else TextBox3.SetFocus end if End Sub などのように、SetFocus で入力順序を変更できます。

その他の回答 (2)

  • postpapa
  • ベストアンサー率41% (27/65)
回答No.3

例えばif文で条件分岐する場合で、TextBox1,TextBox2があった場合 If A=1 then TextBox1.SetFocus else TextBox2.SetFocus End if と記入でも各項目に移動出来ます。 飲んでますので、間違ってたらゴメンナサイ・・・・・・・・ 他にも方法はありますが、自分で色んな本や他の人の書いたコードで勉強して下さい。 身につきますよ。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 こちらはExcel97ですが、TabIndexで指定出来るけど。。。 分岐処理など、もう少しソースを上げてください。

関連するQ&A

  • Vba UserForm SetFocus

    ExcelのVbaでUserForm上に英単語のタイピング練習のソフトを作ろうとしていますが、うまくいきません。コントロールのイベントについての理解が不足しているのが分かりました。 ユーザフォーム上の複数のテキストボックス間のフォーカスの移動について教えて下さい。 UserForm1にテキストボックスを3つ、コマンドボタンを1つ配置しました。それぞれTextBox1、TextBox2、TextBox3、CommandButton1とします。 Private Sub CommandButton1_Click() TextBox3.SetFocus ・・・(1) End Sub Private Sub TextBox3_Enter() MsgBox "In TextBox3" TextBox2.SetFocus ・・・(2) End Sub 各TextBoxのTabStopプロパティは「True」、「TabIndex」は番号順になっています。 コマンドボタンのTabStopプロパティは「False」にしています。 フォームを表示し、コマンドボタンをクリックするとエラーが発生します。 (2)の実行の後(?)、(1)がエラー表示されます。 各イベントの発生のタイミング、連鎖、終了等の理解が不足していて、その理由がよく分かりません。どなたか教えていただけないでしょうか。よろしくお願いします。

  • UserFormのSetFocus

    環境はExcel2002です (1)TextBox1に入力された数値を,区切りにする (2)TextBox2を入力不可の状態から入力可能な状態にする (3)TextBox2をSetFocusする という単純なプロシージャなのですが SetFocusされなくて困ってます UserFormタブオーダーの順番はTextBox1,TextBox2の順になっています 考えられる原因はなんでしょうか? ご教示願います 原因が不明でも回避する方法を教えていただいても結構です なんとしてもSetFocusしたい Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Me.TextBox1.Text = Format(TextBox1.Text, "#,##0") Me.TextBox2.Enabled = True Me.TextBox2.BackColor = &H80000005 '背景色(白色) Me.TextBox2.SetFocus End Sub

  • 【Excel VBA】UserForm上のTextBoxについて

    UserForm上にTextBoxを配置し テキストを入力後Enterを押すことで中身を判定するロジックをKeyUp関数内に設けているのですが、 たまにEnterが反応しないことがあります。 その他のキー入力は入りますし、 Enter自体も一旦他のウィンドウをアクティブにしてから 再度UserFormをアクティブに戻して入力すると反応します。 Enterが押されるまでは以下のコードにより関数を抜けています。 If KeyCode.Value <> vbKeyReturn Or TextBox1.Value = "" Then Exit Sub 再現性もないので何が原因なのか判りません。 よろしくお願いいたします。

  • VBAで数値入力について

    Excel VBAで、UserFormにTextBoxを配置しています。 TextBoxに入力された数値は、半角数値で正数で小数点以下の桁数は1までと制限したいです。 現在は下記のプログラムにしているのですが、「1.2.3」と入力されるとエラーが表示されずに通ってしまいます。。。 どのようにしたらよいのでしょうか。 For i = To Len(TextBox1.Text) If Not Mid(TextBox1.Text, i, 1) Like "[0-9 And .]" Then Message"半角数値ではありません" Exit Sub End If Next i If Val(Text1.Text) = 0 Or TextBox1.Text = "" Then Message"数値を入力してください" Exit Sub End If

  • VBAでのユーザーフォーム上でのタブオーダーの移動の方法

    やりたい事を以下に書きます。  ユーザーフォームで入力用のTEXTBOXがいくつかあり、TABINDEXが最初のTEXTBOXから順に入力していきます。  1つのTEXTBOXに入力完了後した場合、TABキーまたは、ENTERにより次のTEXTBOXにフォーカスが移動し、最後にコマンドボタンにを押すと入力が完了するというフォームを作っています。  ただし、最初のTEXTBOXに『99』を入力すると、途中のTEXTBOXへのフォーカスの移動はしないで最後のコマンドボタンにフォーカスが移動するようにしたいと考えています。 問題点を以下に書きます。  TEXTBOXの入力完了を現在、「AfterUpdate」イベントでつかまえて、TEXTBOXの値を取得し、その値が『99』だった場合、コマンドボタンにフォーカスを移動するようにコーディングしています。 こんな感じです。(かなり省略していますが、) Private Sub TextBox1_AfterUpdate() If TextBox1.Value = "99" Then CommandButton1.SetFocus Exit Sub End If End Sub この用にコーディングすると、TABINDEXが二つ後ろのTEXTBOXが入力待ち状態となってしまいます。 たとえば TEXTBOXが3つコマンドボタンが1つのフォームだと、 TEXTBOX1に『99』と入力し、上記のコーディングだと一度コマンドボタンにフォーカスが移動したあと、最後にTEXTBOX3にフォーカスが移動して入力待ち状態となる感じです。 色々試しましたが、解決方法が見つかりません。知っている方いましたら、教えてください。

  • ユーザーフォームVBAでCells(n, 7)が

    いつもお世話になります Windows7 excell2010 です ご指導を仰ぎたいのは参照図で言うと、 TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び 参照図のG13に入力されません。 VBAを勉強し始めたはかりですのでどこが悪いかわかりません。 恐れ入りますがご指導願えませんでしょうか。 下記参考にします。 Module のコードには Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub UserForm1 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Cells(n, 4) = UserForm1.TextBox4.Text Cells(n, 5) = UserForm1.TextBox5.Text Cells(n, 6) = UserForm1.TextBox6.Text Cells(n, 7) = UserForm1.TextBox7.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • UserFormのTextBoxに入力した値を保存する方法がありますか

    UserFormのTextBoxに入力した値を保存する方法がありますか? 具体的には、UserFormのTextBoxに2010/6/10と入力したときに シートのセルT13に表示されるように以下のマクロを作成しました。 Private Sub CommandButton1_Click() Range("T13").Value = 日付.Value If CloseMode = vbFormControlMenu Then Cancel = True Me.Hide End If End Sub 再度UserFormを開くと前の入力内容があるのですがExcelを保存 して閉じて再度シートを開くと空白になってしまいます。 UserFormを開いたタイミングで出力させたT13の値を返すという ようなマクロにするにはどうしたらよいでしょうか。 初心者なので詳しく教えていただけませんか。

  • EXCEL2000でTextBox1にフォーカスをあてたい

    いつもお世話になります。 OSはWin XP Home EXCEL2000です。 現在以下の現象で悩んでおります。 EXCEL2000のVBAでUserform1(シート上ではない方です)を作り、そこにTextbox1(TabIndex = 0)とCommandButton1(TabIndex = 1)を配置しました。 UserFormを初回に表示した時、及びフォームの右上の「X」で閉じた後は問題ないのですが、以下のコードでUserForm1を閉じた後に再び他のマクロからUserForm1.showとやると、どこにもフォーカスがない状態でUserForm1が立ち上がります。 Private Sub CommandButton1_Click() UserForm1.TextBox1.SetFocus UserForm1.Hide End Sub 一方他のマクロから UserForm1.show UserForm1.textbox1.SetFocus とやってみても期待通りにフォーカスはあたりません。 どのような場合でもUserFormが表示されたときにはtextbox1にフォーカスをあてるようにしたいのです。 尚、この現象はEXCEL2002だと同じコードでも問題なくフォーカスがあたります。 以上よろしくお願いします。

  • エクセルVBA フォームの日付を指定

    データ登録フォームの日付を指定したいのですがどうすればよいでしょうか? まず、userform5を開きます。規定値は当日にしていますが、過去のものも入れられるようクリアして任意の日付を入力します。 その後、実行ボタンを押すとuserform2を開き、入力開始するのですが、その時の撮影日textboxの値にさきほど入力した値を入れたいです。 変数はPrivate torokudate As Dateこのような形でよいと思いましたが、どこに書けば他のフォームでも利用できるのでしょうか? うまくいってるのかどうかわかりませんが、表示が0:00とされました。 撮影日textboxのプロパティ設定がわるいのかどうかもよくわかりません。 初歩的なVBAですが、よろしくお願いします。

  • エクセルVBAのマクロ文について

    エクセルVBAで、シート上のボタン(フォーム)をクリックすると、UserForm1が表示されてその中のTextBoxに別のシートのセルに入力したいる値を表示させたくて、以下のようにボタン(フォーム)にマクロを入力したのですが、エラーがでてきてうまくいきません。 入力したマクロが間違っているのでしょうか? Sub ボタン1_Click() UserForm1.Show UserForm1.TextBox1 = Sheets("入力").Ranges("D11").Value End Sub すみませんが、ご存知の方、教えてくださいませんか?

専門家に質問してみよう