退出事件未在TextBoxes上正确触发

时间:2019-06-12 06:32:11

标签: vba ms-word

我对目前正在创建的表单有疑问。它基本上是一种输入网络数据的简单表格。我有一种算法来检查有效的IP,并希望文本框在输入错误的内容时变为红色。对于大多数文本框来说,这很好用,但对于某些文本框,则显示出奇怪的行为。

用户表单图片:

enter image description here

我正在使用文本框的退出功能进行检查,因此在您仍然输入内容时,这些框不会立即变成红色。这是该代码:

Private Sub LANGW_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsValidIP(AddHost.LANGW) = False Then AddHost.LANGW.BackColor = RGB(255, 0, 0) Else AddHost.LANGW.BackColor = RGB(255, 255, 255)
End Sub

现在是这个问题。该代码对所有文本框都适用,除了每个框架区域中的最后一个文本框。在这种情况下,LAN网关和查询/检索。当我离开文本框时,不会触发这些事件,而是在退出文本框一次后返回相同的框架区域。 谁能提出这个解释?我已经浏览了Microsoft对退出事件的描述,但是找不到任何东西。

2 个答案:

答案 0 :(得分:0)

您能否先删除“网关”文本框,然后以其他名称(如gateway2)的形式再次插入它?

然后尝试在子

中使用诸如“ msgbox('it work')”之类的简单方法

答案 1 :(得分:0)

所以我知道了。这是所有偶然遇到同一问题的答案。

似乎退出事件仅在同一帧内处理。如果我用鼠标将这个TextBox退出到同一框架内的另一个TextBox,它将起作用。只有当我退出另一个框架时才不会。但是,退出事件存储在该Frame中,并且一旦该Frame再次获得焦点,便会执行该事件。这就是为什么当我跳回到框架中时,会得到脚本执行的奇怪行为的原因。

要解决此问题,我现在也只需对帧退出事件进行相同的检查,就可以了。因为这些将在您退出另一个框架时执行。 (是的,如果框架再次获得焦点,将会导致代码将第二次执行,但是在这种特定情况下,这并没有真正的伤害。如果您想对此类事件执行更有意义的操作,则应该将检查限制为仅帧退出事件)

示例:

Private Sub LAN_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If IsValidIP(AddHost.LANIP) = False Then AddHost.LANIP.BackColor = RGB(255, 0, 0) Else AddHost.LANIP.BackColor = RGB(255, 255, 255)
If IsValidIP(AddHost.LANSubnet) = False Then AddHost.LANSubnet.BackColor = RGB(255, 0, 0) Else AddHost.LANSubnet.BackColor = RGB(255, 255, 255)
If IsValidIP(AddHost.LANGW) = False Then AddHost.LANGW.BackColor = RGB(255, 0, 0) Else AddHost.LANGW.BackColor = RGB(255, 255, 255)

End Sub