[[20230304140037]] 『ユーザーフォームの切り替えでtextbox1にフォーカ』(当てたい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームの切り替えでtextbox1にフォーカスを当てたい』(当てたい)

こんにちは。

userform1にコマンドボタンがあってボタンを押すと
userform1を閉じ、userform2が開きます。
この時userform2内にあるtextbox1にフォーカスをあてるにはどうしたらいいですか?

Private Sub UserForm_Activate()

    'フォーカスする
    TextBox1.SetFocus
End Sub
を書いたのですがフォーカスされませんでした。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


TextBox1のタブオーダーを一番上にする、ではだめですか?
(MK) 2023/03/04(土) 14:16:27

 参考HPです。

https://www.officepro.jp/excelvba/userform/index23.html
(MK) 2023/03/04(土) 14:17:54


 Private Sub CommandButton1_Click()
     Unload Me
     UserForm2.Show
 End Sub

 Private Sub UserForm_Initialize()
     Me.TextBox1.SetFocus
 End Sub
(フォーキー) 2023/03/04(土) 14:21:21

 どんな展開になっていて、この後の展開はどうなるのか
 解らないので何とも言えませんが

 この時点の
 >Unload Me
 は、ちょっと危険かも。
(普通の子) 2023/03/04(土) 14:40:23

 >userform2が開きます。
 だったらuserform2のInitializeに
 Private Sub UserForm_Initialize()
     TextBox1.SetFocus
 End Sub
 でいいのでは。
(?) 2023/03/04(土) 14:47:28

これがuserform2内に記載されているコードです。
Private Sub UserForm_Initialize()
Me.TextBox1.SetFocus
End Sub
Private Sub ListBox1_MouseMove( _
ByVal Button As Integer, ByVal Shift As Integer, _
ByVal x As Single, ByVal y As Single)

 HookListBoxScroll

End Sub
Private Sub TextBox1_Change()
TextBox1.SetFocus
'テキストボックスの内容が変化したときに実行するコード
Dim lstDat As Variant
Dim buf As String, bufLen As Integer
Dim rowEnd As Long
Dim i As Long
'D列の最終行を調べ、変数lstDatにD列の値を格納
With ThisWorkbook.Worksheets("機種リスト")
rowEnd = .Cells(Rows.Count, 1).End(xlUp).row
lstDat = Worksheets("機種リスト").Range(.Cells(1, 1), .Cells(rowEnd, 1)).Value
End With
'テキストボックスの内容と文字数を変数buf,bufLenに格納
buf = Me.TextBox1
bufLen = Len(buf)
'リストボックスの内容を初期化
Me.ListBox1.Clear
'テキストボックスの文字数が0の場合終了
If bufLen = 0 Then Exit Sub
'テキストボックスの内容とlstDatの内容を比較する
For i = 1 To rowEnd
'一致した場合にリストボックスに値を追加する
If buf = Left(lstDat(i, 1), bufLen) Then
Me.ListBox1.AddItem lstDat(i, 1)
End If
Next i
End Sub
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'リストボックスの値をダブルクリックしたときに実行するコード
Dim buf As String
'リストボックスの値を変数bufに格納する
buf = Me.ListBox1.Value
....
処理
End Sub

リストボックスが何か影響しているのですか?

(当てたい) 2023/03/04(土) 14:57:11


 関係あるかわかりませんが、ちょっと気になったので
 調べてみました。

https://jizilog.com/vba-listbox-userform
(MK) 2023/03/04(土) 15:09:55


 参考まで。

 [Excel VBA]ユーザーフォームを隠すには?
https://xtech.nikkei.com/it/atcl/column/15/090100207/090100118/
(MK) 2023/03/04(土) 15:19:38

 >これがuserform2内に記載されているコードです。
 UserFormにTextBox1を張り付け、そのコードも貼り付けて
 試してみたらtextbox1にフォーカスされますけど。

(?) 2023/03/04(土) 15:40:54


あ、?さんの返信を読んで思った事。
ひょっとして、UserFormをいくつか出しっぱなしでは。
エクセルがフォーカスを見失うといった事も頭に入れておいた方がいいかもね。
(普通の子) 2023/03/04(土) 15:57:22

 Private Sub TextBox1_Change()のTextBox1.SetFocusのことでしょうか。
 ここにTextBox1.SetFocusは必要ないと思いますけど
 これと勘違いしていませんか。
(?) 2023/03/04(土) 16:09:23

マウスをスクロールするとtextbox1にフォーカスされます。
changeイベントのフォーカスは消しましたがダメでした。
(当てたい) 2023/03/04(土) 16:17:32

試しにエクセルのシート上にコマンドボタンを作成して、ユーザーフォームを開くマクロを作成して
ユーザーフォーム内のコードは同じにして。
そしたら、text box1にフォーカスされました。
(当てたい) 2023/03/04(土) 16:22:16

 最低限のコードから徐々にコードを追加して検証してみるのがいいとおもいます。
 以下のように、Uerform1にコマンドボタン1個だけ、Uerform2はテキストボックス1個だけ配置
 ちゃんとUserform2を表示したとき、テキストボックスにフォーカスがあたります

 '標準モジュール
 Sub test()
   UserForm1.Show
 End Sub

 'Useform1 コマンドボタン1個だけ配置

  Private Sub CommandButton1_Click()
    Me.Hide
    UserForm2.Show
  End Sub

 'Useform2 テキストボックス1個だけ配置(TabIndex=0)
 'コードなし
(´・ω・`) 2023/03/04(土) 17:08:00

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.