需要帮助、VBA、从另一个私有子系统停止私有子系统事件

需要帮助、VBA、从另一个私有子系统停止私有子系统事件,vba,excel,Vba,Excel,我有私有子文本框1_键下和私有子文本框1_更新后。如果im完成了文本框1的填充,那么单击组合框仍然会填充列表。但当im填写完textbox1后,按enter键,组合框将填充异常列表。cmbo4是一个子事件,它根据我在文本框1中输入的内容填充组合框。我的代码在一个用户窗体上 这是我的密码: Private sub TextBox1_KeyDown(ByVal KeyCode As_ MSForms.ReturnInteger,ByVal Shift As Integer) If KeyCode=

我有私有子文本框1_键下和私有子文本框1_更新后。如果im完成了文本框1的填充,那么单击组合框仍然会填充列表。但当im填写完textbox1后,按enter键,组合框将填充异常列表。cmbo4是一个子事件,它根据我在文本框1中输入的内容填充组合框。我的代码在一个用户窗体上

这是我的密码:

Private sub TextBox1_KeyDown(ByVal KeyCode As_ 
MSForms.ReturnInteger,ByVal Shift As Integer)
If KeyCode=13 Then
ComboBox4.Clear
Call cmbo4
ComboBox4.DropDown
ComboBox4.SetFocus
End If
End Sub
现在我有了这个textbox1_afterupdate事件,我添加这个事件是为了避免当用户想用鼠标单击下一个组合框而不是按enter键时程序出错

Private Sub TextBox1_AfterUpdate()
ComboBox4.Clear
Call cmbo4
ComboBox4.DropDown
ComboBox4.SetFocus
End Sub

我的问题是在用户按enter键时停止要执行的事件textbox1\u afterupdate,这样我的组合框就不会有异常列表

为什么不使用Exit事件而不是KeyDown和afterupdate?我尝试过,但combobox4.clear,combobox4.dropdown和combobox.setfocus无效..只有cmbo4子事件运行您可以将combobox4.dropdown和combobox.setfocus添加到cmbo4(模块中的公共)中,并使用application.ontimeIMO调用它。最好只让调用例程设置控制变量值;其他例程只应检查其值。这样,您就可以使用它来停止多个其他事件。Rory-如果您没有清除它,那么,一旦您使用了一次键盘,您就永远不能使用鼠标,因为变量永远不会清除。抱歉-没有注意到在这种情况下,事件的实际内容!尽管如此,考虑到将触发afterupdate的显式setfocus,您仍然可以在keydown事件中重置它。
Option explicit
Dim InProgress as boolean  'module level variable

Private sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger,ByVal Shift As Integer)
If KeyCode=13 Then
     ComboBox4.Clear
     Call cmbo4
     ComboBox4.DropDown
     ComboBox4.SetFocus
     InProgess = true
End If
End Sub

Private Sub TextBox1_AfterUpdate()
if inProgress then  'we just updated it so don't repeat
     inprogress = False  'just clear the event
else
     ComboBox4.Clear
     Call cmbo4
     ComboBox4.DropDown
     ComboBox4.SetFocus
     inprogress = False 'and clear the event
End IF
End Sub