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
退出子
结束子
再次感谢您的帮助。
我有一个带有 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 退出子 结束子
再次感谢您的帮助。