プロが教えるわが家の防犯対策術!

環境:Excel 2002です

UserForm1での質問です
Flame5にTextBox14とTextBox15があります
TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後
Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します

実行時エラー 2147467259(800004005)

異なるFlameにSetFocusする方法があるのでしょうか?
Flame5の中でTextBox14及びTextBox15のSetFocusはできます

TextBox14とのTextBox15のBeforeUpdateのプロシージャです
Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

If Len(Me.TextBox14.Text) <> 0 Then

Dim a As Variant
a = 100 - Val(Me.TextBox14.Text)
Me.TextBox15.Text = a

Dim i As Integer
For i = 1 To 4
Me.Controls("TextBox" & i).Enabled = True
Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色)
Next i

End If

Me.TextBox1.SetFocus

End Sub

Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

If Len(Me.TextBox15.Text) <> 0 Then

Dim a As Variant
a = 100 - Val(Me.TextBox15.Text)
Me.TextBox14.Text = a

Dim i As Integer
For i = 1 To 4
Me.Controls("TextBox" & i).Enabled = True
Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色)
Next i

End If

UserForm1.TextBox1.SetFocus

End Sub

ご支援願います

「Excel VBA SetFocus」の質問画像

A 回答 (3件)

こちらでは解決しているようです。


http://www.moug.net/faq/viewtopic.php?t=65607

別解を。

質問者さんの図では、
フレームの本来の使い方(オプションボタン、チェックボックスなどの1個のみを選択する)をしていません。

見た目だけを、分かり易くグループ化しているのみです。

これなら、苦労してフレーム絡みのフォーカス移動を制御するより

ラベルを、フレームのように見せかけて
(SpecialEffect プロパティ を 3 に設定)
(テキストボックスは最前面に表示)
(見出し部分はラベルを重ねる) 等々

質問者さんのコードで動かすほうがずっと簡単かと思います。
    • good
    • 0
この回答へのお礼

ご指摘の通り見た目だけを、分かり易くグループ化してました

グリッドが使えてForm作成が簡単だったのです。

ラベルを、フレームのように見せかけて
(SpecialEffect プロパティ を 3 に設定)
(テキストボックスは最前面に表示)
(見出し部分はラベルを重ねる) 等々 … は目からうろこでした。

この方法で作り直しました
ありがとうございました

お礼日時:2013/03/23 19:04

分かっているとは思いますが、直接、TextBox1 とか名指しするから問題ですよね。


何のためのFrameかは分かりませんが、概ね、見栄えの問題だけだと思います。
そうなら、Frame自体へ飛ばせば(SetForcus)よいと思います。

例:Me.Frame2.SetFocus

Frameの中の順番自体は、その中のコントーロールに、TabIndexで合理的な順序をつければよいと思います。常識的に、Frameから別のFrameとあっちに行ったり、こっちにいったりはしないものですから。

つまり、TextBox1 は、Frame2 の中で、TabIndex は、0になっているということです。
    • good
    • 0
この回答へのお礼

見栄えの問題だけでVBAを作ってはダメなことがよくわかりました

お礼日時:2013/03/23 18:59

Me.TextBox1.SetFocus


を次のように変更してみてはいかがでしょう。
Me.SetDefaultTabOrder
Me.TextBox1.SetFocus
    • good
    • 0
この回答へのお礼

早速回答いただきありがとうございました

残念ながらエラー現象は回避できませんでした
他の思案おもちでしたら教えてください

お礼日時:2013/03/22 14:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!