みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

Excel VBA SetFocus

環境: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

ご支援願います

投稿日時 - 2013-03-22 12:29:46

QNo.8005858

すぐに回答ほしいです

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

こちらでは解決しているようです。
http://www.moug.net/faq/viewtopic.php?t=65607

別解を。

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

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

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

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

質問者さんのコードで動かすほうがずっと簡単かと思います。

投稿日時 - 2013-03-23 01:27:12

お礼

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

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

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

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

投稿日時 - 2013-03-23 19:04:12

ANo.3

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

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

回答(3)

ANo.2

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

例:Me.Frame2.SetFocus

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

つまり、TextBox1 は、Frame2 の中で、TabIndex は、0になっているということです。

投稿日時 - 2013-03-22 20:36:49

お礼

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

投稿日時 - 2013-03-23 18:59:08

ANo.1

Me.TextBox1.SetFocus
を次のように変更してみてはいかがでしょう。
Me.SetDefaultTabOrder
Me.TextBox1.SetFocus

投稿日時 - 2013-03-22 13:22:38

お礼

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

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

投稿日時 - 2013-03-22 14:08:19

あなたにオススメの質問