2017-06-08 646 views
1

ExcelにVBA Userformがあります。これには6つのテキストボックスがあり、TabStopをTrueに設定したUserformの唯一のコントロールです。Excel VBA - UserForm Textboxにフォーカスを設定できません

テキストボックスをタブで移動しても問題なく移動できます。私はSetFocusをTextbox間を移動するときに起動するイベントで動作させることはできません。私はCommandButtonをUserform16.Textbox1.Setfocusでuserformに配置することができ、期待どおりに動作し、Textbox1にフォーカスを移動します。

TextBox2が入力されているときに、TextBox1をTextBox1に戻すように単純なテストイベントを設定しました(下記参照)、TextBox1からタブアウトしたときに実際にフォーカスがTextbox3に移動します。

Private Sub TextBox2_Enter() 
    Cancel = True 
    UserForm16.TextBox1.SetFocus 
End Sub 

上記で Stopを置くことによって、私は予想通り、イベントが発火していることがわかりますが、それは私が焦点に次のコントロールを制御することはできません。

サブ内のCancel = Trueステートメントの有無にかかわらず同じ結果が得られます。

あなたは頭を壁に打ちつけることによって学びます。ノッキングとグーグルの日の後、私はより高いプログラミング知性に夢中になります。

スタン

+0

放棄する前に 'TextBox1'のデータを検証するのが目的ならば、' Cancel = True'を設定することで 'TextBox1_Exit'の代わりにそれを扱いませんか? –

+0

Cancel = Trueは、イベントの引数ではないため、何の効果もありません。私は、Enterイベントで行われたときにフォーカスを変更することができないということを思い出しているので、代わりに別のイベントを試してみることをお勧めします。 – jkpieterse

+0

私がやろうとしているのは、次のテキストボックスに行くときにテキストボックス内の日付を検証することですが、失敗した場合は元のテキストボックスにフォーカスを戻し、そのテキストボックス内のデータをハイライト表示するようにします。上記のように、Cancel = Trueの元のテキストボックスにフォーカスを合わせることはできますが、このテキストボックスが選択されていることをユーザーに知らせることはできません。ありがとう。 – Stan

答えて

0

私はTextBox2をを入力するとテキストボックスがをTextBox1までバックフォーカスを移動するための簡単なテストイベント(下記参照)を設定するときのTextBox1のうちI]タブ、それは実際にTextbox3にフォーカスを移動します。

_Enter()イベントの別のコントロールにフォーカスを設定することはできません。あなたは、コードを持っているコントロールにフォーカスを移動しますしようとした場合例えばTabIndex

は、あなたがこのコードを持っている場合は、ここで、次のTabIndex

TextBox1 (TabIndex 0) 
TextBox2 (TabIndex 1) 
TextBox3 (TabIndex 3) 
TextBox4 (TabIndex 4) 
TextBox5 (TabIndex 2) 

で5つのテキストボックスを持っているとしましょう

Private Sub TextBox2_Enter() 
    TextBox3.SetFocus 
End Sub 

あなたがからTABを押した瞬間の場合は、TabIndexがあるため、フォーカスはTextBox5TextBox3ではなく)に移動します。

それは_Enter()の引数ではありませんので、それは言うPrivate Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

であるようにもCancel = Trueは何の効果もありません編集

ところで、唯一の時間は、フォーカスがあなたにTextbox1に戻ってきますシナリオは、フォームにTextBoxesが2つしかない場合です。

関連する問題