excel vba 清除文本框时触发更新后的用户窗体

excel vba userform afterupdate fires when text box cleared

我有一个带有 5 个文本框的简单用户表单。我可以使用 "ADD" 命令按钮处理数据,但是考虑到在一个会话中可能有 100 个条目,如果使用子 [last textbox]_afterupdate() 触发该过程会更快更容易一些。

问题:清除文本框时,最后一个再次触发程序。这是代码:

Private Sub txtagainst2_afterupdate()


Set rTeam = [A4:A50].Find(txtTeam, lookat:=xlWhole)
Set rTeam = rTeam.Resize(1, 15)
With rTeam
    code to do stuff with the textbox values
End With
txtTeam = ""
txtFor1 = ""
txtAgainst1 = ""
txtFor2 = ""
txtAgainst2 = ""
txtTeam.SetFocus

End Sub

我尝试了几种可能性,但无法破解。

如有任何建议或解决方案,我们将不胜感激。

谢谢你,彼得

为了防止代码触发自身(或任何其他代码),您需要暂时禁用触发事件的代码行周围的事件 运行:

而不只是:

txtAgainst2 = ""

使用:

Application.EnableEvents = False
txtAgainst2 = ""
Application.EnableEvents = True

这将防止在更新文本框时触发 "AfterUpdate" 事件。

迈克尔。谢谢 您的解决方案是我在发布之前尝试过的解决方案,但是由于某种原因,逐步 returns 到过程的开头并第二次运行它(和以前一样)。我刚才又试了一次,结果是一样的。第二次没有更新,因为txtAgainst2是空的。

但是...在过程开始时尝试了 if 语句(如下)。必须将除文本框 tabstop 之外的所有内容设置为 =false,因为不会将焦点设置到 textbox1。这似乎有效。仍然不确定理由。

私人子 txtagainst2_afterupdate()

If txtAgainst2 = "" Then GoTo handler:

Set rTeam = [A4:A50].Find(txtTeam, lookat:=xlWhole)
Set rTeam = rTeam.Resize(1, 15)
With rTeam
do stuff
End With
txtTeam = ""
txtFor1 = ""
txtAgainst1 = ""
txtFor2 = ""
txtAgainst2 = ""
txtTeam.SetFocus
Exit Sub

处理程序: txtTeam.SetFocus 退出子 结束子

再次感谢您的帮助。