Set focus on UserForm Textbox on tabbing from another Textbox

半腔热情 提交于 2021-01-27 16:32:43

问题


I have a Userform in Excel. It has 6 Textboxes, they are the only controls on the Userform with TabStop set to True.

I can tab and move through the textboxes. I cannot get SetFocus to work on Events fired when moving between the Textboxes. I can put a CommandButton on the userform with Userform16.Textbox1.Setfocus and it works as expected to move the focus to Textbox1.

I set up a simple test event (see below) to move the textbox focus back up to TextBox1 when Textbox2 is entered. It moves focus to Textbox3 when I tab out of TextBox1.

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

By putting a Stop in the above, I can see that the event is firing as expected, but it will not allow me to control the focus the next control.

I get the same results with or without the Cancel = True statement in the sub.


回答1:


I set up a simple test event (see below) to move the textbox focus back up to TextBox1 when Textbox2 is entered, it actually moves focus to Textbox3 when I tab out of TextBox1.

You can't set focus to another control in the _Enter() event. If you try to then the code will move focus to control which has the next TabIndex

For example

Let's say you have 5 textboxes with the following TabIndex

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

Now if you have this code

Private Sub TextBox2_Enter()
    TextBox3.SetFocus
End Sub

The moment you press TAB from TextBox1, the focus will move to TextBox5 (and not TextBox3) as it has the next TabIndex.

Also Cancel = True will not have any effect because it is not an argument of _Enter() like it is of say Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Edit

BTW, the only time the focus will come back to Textbox1 in your scenario is when there are only two TextBoxes in the form.




回答2:


I know this is old but this answered my question and I can't comment. However, Stan in reference to your comment on June 8, 2017 I believe you were looking for something like the code below which will highlight the text in the text box when you use it with Cancel = True. I use it in the textbox exit event. This will be the indication to the user that the text box is selected.

With Me.TextBox1
    .Value = "Full Name"
    .SelStart = 0
    .SelLength = Len(.Text)
    .SetFocus
End With
Cancel = True



回答3:


While it is true that _Enter() event can not handle .SetFocus, the _KeyDown() event can! And thats a pretty good workaround, you just need to monitor if the TAB key was pressed.

So the code would look like something similar where TextBox1 is the one you leave and TB2 is the one you enter;

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Then TextBox1.SetFocus  'where 9 is the KeyCode for the TAB button
End Sub


来源:https://stackoverflow.com/questions/44440050/set-focus-on-userform-textbox-on-tabbing-from-another-textbox

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!