VBA Excel更新事件之后退出input事件
假设我在用户窗体上有一个combobox1,2,3和一个textbox1。 After update
事件后关联到combobox1。 after update
事件被触发after update
,按Tab键(填充combobox2和3)。 在这个事件的代码中,在退出子文件之前,有一个textbox1.setfocus
跳过以tab键(combobox 1,2,3,textbox1)input其他cobobox。 它工作得很好。
当我添加另一个combobox,现在是combobox2,tab选项被改为1,2,3,4。 After update
,仍然关联到combobox1和textbox1.setfocus是退出子之前的最后一行。 不幸的是,当执行after update
退出子行时,会触发combobox3 enter event
并将焦点移动到combobox3。 这是更难以理解,因为标签顺序是combobox1,2,3,4所以它也跳过标签顺序。
当我debuged代码,焦点textbox1被设置为它应该,但仍然只是当退出子被执行,代码行被移动到combobox3input事件…任何提示赞赏。
在您的用户窗体代码窗格中,按如下操作:
-
一个用户窗体范围的
Boolean
variables因此, 在任何Sub / Function代码之前放置它
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
-
为Tab键索引位于
ComboBox1
和TexBox1
之间的所有用户窗体控件添加一个Enter
事件处理程序例如,假设这些是
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()
SubSub CheckSetTextBox1Focus() If SetTextBox1Focus Then Me.TextBox1.SetFocus SetTextBox1Focus = False End If End Sub