Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4323 / 13644 ツリー ←次へ | 前へ→

【57259】ユーザーフォーム内のテキストボックスのフォーカス移動について ken 08/8/3(日) 17:19 質問[未読]
【57261】Re:ユーザーフォーム内のテキストボックス... ichinose 08/8/3(日) 20:26 発言[未読]
【57262】Re:ユーザーフォーム内のテキストボックス... ken 08/8/3(日) 21:03 質問[未読]
【57264】Re:ユーザーフォーム内のテキストボックス... ichinose 08/8/4(月) 6:48 発言[未読]
【57282】Re:ユーザーフォーム内のテキストボックス... ken 08/8/4(月) 20:45 質問[未読]
【57307】Re:ユーザーフォーム内のテキストボックス... ichinose 08/8/6(水) 8:14 発言[未読]
【57316】Re:ユーザーフォーム内のテキストボックス... ken 08/8/6(水) 23:19 お礼[未読]

【57259】ユーザーフォーム内のテキストボックスの...
質問  ken  - 08/8/3(日) 17:19 -

引用なし
パスワード
   またまたお世話になります。
ユーザーフォーム内にテキストボックスとマルチページを配置して
ユーザーフォームを開いたときにのマルチページのページをセル入力により
区別して開く様にしましたするとテキストボックスのフォーカスが最初にならず
マルチページのテキストボックスにフォーカスがかかってしまいます。
この場合どのようにしたら良いのでしょうか?
プロパティを変えてみたりTextbox1.Activateと記入しても変わりません。
何方かお教え下さいませ。

【57261】Re:ユーザーフォーム内のテキストボック...
発言  ichinose  - 08/8/3(日) 20:26 -

引用なし
パスワード
   ▼ken さん:
こんばんは。
>ユーザーフォーム内にテキストボックスとマルチページを配置して
>ユーザーフォームを開いたときにのマルチページのページをセル入力により
>区別して開く様にしましたするとテキストボックスのフォーカスが最初にならず
>マルチページのテキストボックスにフォーカスがかかってしまいます。
>この場合どのようにしたら良いのでしょうか?
>プロパティを変えてみたりTextbox1.Activateと記入しても変わりません。

MultiPageのValueプロパティの設定を行った後、本来ならフォーカスがあたる

コントロール(例えば それがTextbox1なら)に対して

Setfocusメソッドを使ったらどうでしょうか?



multipage1.value=xx

Textbox1.Setfocus

【57262】Re:ユーザーフォーム内のテキストボック...
質問  ken  - 08/8/3(日) 21:03 -

引用なし
パスワード
   ichinose 様
前回は有り難う御座いました。
SetFocusを使ってみましたが
フォーカスが点滅しません。
他に良い方法はありますでしょうか?

▼ichinose さん:
>▼ken さん:
>こんばんは。
>>ユーザーフォーム内にテキストボックスとマルチページを配置して
>>ユーザーフォームを開いたときにのマルチページのページをセル入力により
>>区別して開く様にしましたするとテキストボックスのフォーカスが最初にならず
>>マルチページのテキストボックスにフォーカスがかかってしまいます。
>>この場合どのようにしたら良いのでしょうか?
>>プロパティを変えてみたりTextbox1.Activateと記入しても変わりません。
>
>MultiPageのValueプロパティの設定を行った後、本来ならフォーカスがあたる
>
>コントロール(例えば それがTextbox1なら)に対して
>
>Setfocusメソッドを使ったらどうでしょうか?
>
>・
>・
>multipage1.value=xx
>
>Textbox1.Setfocus

【57264】Re:ユーザーフォーム内のテキストボック...
発言  ichinose  - 08/8/4(月) 6:48 -

引用なし
パスワード
   ▼ken さん:
おはようございます。

>前回は有り難う御座いました。
>SetFocusを使ってみましたが
>フォーカスが点滅しません。

SetFocusを使ってみましたが、
今度は、マルチページ内のテキストボックスにはフォーカスされなくなりましたが、
本来フォーカスが当たるべきテキストボックスにもフォーカスされません。

というように以前と表示に変化があったことを
わかるように記述してください。

>他に良い方法はありますでしょうか?


>>▼ken さん:
>>こんばんは。
>>>ユーザーフォーム内にテキストボックスとマルチページを配置して
>>>ユーザーフォームを開いたときにのマルチページのページをセル入力により
>>>区別して開く様にしましたするとテキストボックスのフォーカスが最初にならず
>>>マルチページのテキストボックスにフォーカスがかかってしまいます。
>>>この場合どのようにしたら良いのでしょうか?
>>>プロパティを変えてみたりTextbox1.Activateと記入しても変わりません。

ユーザーフォームがモーダレスモードで表示されていませんか?

ならば、

UserForm_Initialize()
というイベントプロシジャーに処理を記述するのではなく、

UserForm_Activate に記述してみてみてください。

尚、UserForm_Activate イベントプロシャーに記述するのは、

Textbox1.Setfocusのみで

それ以前に行う Multipage1.value=xxx
等の処理は そのままUserForm_Initialize内の記述でも結構です。


Private Sub UserForm_Activate()
  TextBox1.SetFocus
End Sub

Private Sub UserForm_Initialize()
  With MultiPage1
    If Val(Cells(1, 1).Value) >= 0 And _
     Val(Cells(1, 1).Value) <= 3 Then
     .Value = Val(Cells(1, 1).Value)
     End If
    End With
End Sub

尚、UserForm_Initialize内のコードは一例です。


以下の記述は、私は今までにも何度か同様の内容を記述したことがありますが・・。

ここに記述することに情報漏れがあれば、私とkenさんでは、
見ているブックが、コードが違うものを見ながらあれこれ言っているのと
同じです。

kenさんと私(閲覧者)が同じものを見られるような記述をしてください。
そのためには、kenさんが体験したうまくいかない内容を誰でもその記述どおりに
ブックを作成すれば、コードを実行すれば再現できる再現手順書が必要です。

この記述、結構手間が掛かりますが、VBAを本気でやる気があるならば、
これをすることがkenさんにとって、VBA上達の決して無駄にはなりません
(↑これに関してきっぱり)。

是非、次回からは上記のこと検討してみてください。

尚、これでもうまくいかない場合は、投稿は明日夕方になってしまいます。
(その場合は、どなたかよろしくお願いします)

【57282】Re:ユーザーフォーム内のテキストボック...
質問  ken  - 08/8/4(月) 20:45 -

引用なし
パスワード
   ichinose様
お手数をおかけします。
表現が上手でなくわかりにくい説明でごめんなさい。
今回のActivateでフォーカスが入るページと
入らないページがあります。
ちょっと私には難しすぎるみたいです。

【57307】Re:ユーザーフォーム内のテキストボック...
発言  ichinose  - 08/8/6(水) 8:14 -

引用なし
パスワード
   おはようございます。

>今回のActivateでフォーカスが入るページと
>入らないページがあります。

私が確認した環境では、UserformのActivateイベントで処理すことで
正常に作動したのですが・・・。

環境 Excel2002 Win2000

新規ブックにて
ユーザーフォーム(Userform1)

 テキストボックス(Textbox1)
 マルチページ(Multipage1)
   4枚のページを作成する
  (既定値で2ページ用意されていますから、あと2ページ追加してください)
   各ページ(Page1からPage4)には、それぞれ一つのテキストボックスを
   用意します。
   Textbox2、Textbox3、Textbox4、Textbox5


仮にSheet1のセルA1に指定されたページを開いて上記のユーザーフォームを
表示させる(モーダレス表示)という仕様だとすると・・・。

上記コントロールを配置したUserform1のモジュールには、

'=================================================================
Private Sub UserForm_Activate()
  TextBox1.SetFocus
End Sub
'=================================================================
Private Sub UserForm_Initialize()
  Dim num As Long
  With MultiPage1
    .Value = 0
    num = Val(Worksheets("sheet1").Cells(1, "a").Value)
    If num > 0 And num < .Pages.Count Then
     .Value = num - 1
     End If
    End With
End Sub

標準モジュールに
'==================================================================
Sub main()
  UserForm1.Show vbModeless
End Sub


Sheet1のセルA1に1〜4の値を設定して

上記のmainを実行してみてください。

セルA1で設定したページがアクティブな状態でユーザーフォームが表示され、

テキストボックス(Textbox1)をフォーカスする事が出来るはずですが。


上記Userform1とうまくいかないユーザーフォームとは根本的に構成が違うなら
そのユーザーフォームの構成(コントロール配置の詳細)や
コードなどの投稿を期待してたんですが・・・。
(他にもExcelやWinのバージョンも必要ですねえ)


ユーザーフォームには、私からするとビックリするほどのバグの
存在このサイトの過去ログにも投稿されていますし、
私の実体験でもユーザーフォームを含んだちょっと規模の大きい
プログラムなどを作成すると、一つぐらいは見つかります。

Multipage1.Value=xx 

でフォーカスまで移ってしまうのだって私に言わせればバグですけどねえ

他にも、

フレームとその中に配置されたテキストボックス(文字入力系コントロール)
Multipageとそのページ内に配置されたテキストボックス(文字入力系コントロール)

は、不具合があることがこの質問箱で発表されています(By 角田さん)。

www.h3.dion.ne.jp/~sakatsu/Excel_Tips03.htm

さらにモーダルモードでは、正常に作動しても
同じ事をモーダレスモードで表示すると
正常に作動しないこともいくつか確認されています。

事前にそれがわかっていれば、憂いも少ないので

詳細な再現手順書が必要だったんですが、残念です。

【57316】Re:ユーザーフォーム内のテキストボック...
お礼  ken  - 08/8/6(水) 23:19 -

引用なし
パスワード
   ichinose様

>Sub main()
>  UserForm1.Show vbModeless
>End Sub

を試してみましたら上手くいきました。

これだとページをチェンジしても
指定したTextboxがフォーカスとなり
今までのわずらわしい作業がなくなりました。

有り難う御座いました。
もっと勉強します。

4323 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free