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事件…任何提示赞赏。

在您的用户窗体代码窗格中,按如下操作:

  • 一个用户窗体范围的Booleanvariables

    因此, 任何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键索引位于ComboBox1TexBox1之间的所有用户窗体控件添加一个Enter事件处理程序

    例如,假设这些是ComboBox2ComboBox3ComboBox4

     Private Sub ComboBox2_Enter() CheckSetTextBox1Focus End Sub Private Sub ComboBox3_Enter() CheckSetTextBox1Focus End Sub Private Sub ComboBox4_Enter() CheckSetTextBox1Focus End Sub 
  • 添加以下CheckSetTextBox1Focus() Sub

     Sub CheckSetTextBox1Focus() If SetTextBox1Focus Then Me.TextBox1.SetFocus SetTextBox1Focus = False End If End Sub