假设我在userform上有一个combobox1,2,3和一个textbox1。 After update
事件与combobox1相关联。按Tab键时after update
事件被触发(填充组合框2和3)。在此事件的代码中,就在退出sub之前,textbox1.setfocus
跳过了以Tab键顺序输入其他cobobox(组合框1,2,3,textbox1)。它运作得很好。
当我添加另一个现在是combobox2的组合框时,标签顺序更改为1,2,3,4。
After update
仍然与combobox1关联,textbox1.setfocus是exit sub之前的最后一行。不幸的是,当执行after update
的退出子行时,它会触发combobox3 enter event
并将焦点移至combobox3。这更难以理解,因为Tab键顺序是combobox1,2,3,4所以它也会跳过Tab键顺序。
当我对代码进行调试时,对textbox1的关注设置应该如此,但仍然只是在执行exit sub时,代码行被移动到combobox3进入事件... 任何提示赞赏。
答案 0 :(得分:1)
的行为如下:
用户形式范围Boolean
变量
因此,将此放在任何子/功能代码
之前Dim SetTextBox1Focus As Boolean
在ComboBox1_AfterUpdate()
事件处理程序中:
Private Sub ComboBox1_AfterUpdate()
If (condition that checks if the data entered in combobox1 exists in the database) is True Then
...
your code to fill comboboxes 2, 3 ad 4
...
Me.TextBox1.SetFocus
SetTextBox1Focus = True '<--| "flag" TextBox1 to receive the focus
End If
End Sub
为所有用户表单控件添加Enter
事件处理程序,其标签索引介于ComboBox1
和TexBox1
之间
例如,假设这些是ComboBox2
,ComboBox3
和ComboBox4
Private Sub ComboBox2_Enter()
CheckSetTextBox1Focus
End Sub
Private Sub ComboBox3_Enter()
CheckSetTextBox1Focus
End Sub
Private Sub ComboBox4_Enter()
CheckSetTextBox1Focus
End Sub
添加以下CheckSetTextBox1Focus()
子
Sub CheckSetTextBox1Focus()
If SetTextBox1Focus Then
Me.TextBox1.SetFocus
SetTextBox1Focus = False
End If
End Sub