Excel VBA用户表单文本框无法识别退出

Excel VBA用户表单文本框无法识别退出,excel,vba,userform,Excel,Vba,Userform,希望这是一个简单的一个人在那里。我有一个Excel VBA用户表单,其中有许多用于输入参数的文本框。此外,userform上还有一个图像。当用户单击文本框时,UserForm上的图像将通过触发_Enter()事件来更改,以显示相关参数的图像。这很好,不是问题。但是,当用户退出文本框时,我希望图像恢复为原始图像。我尝试了_Exit()和_AfterUpdate()的事件来实现这一点,虽然如果我更新参数,它可以正常工作,但是如果我不更新参数,它就不起作用。本质上,图像在我进入文本框时会更改,但在我离

希望这是一个简单的一个人在那里。我有一个Excel VBA用户表单,其中有许多用于输入参数的文本框。此外,userform上还有一个图像。当用户单击文本框时,UserForm上的图像将通过触发_Enter()事件来更改,以显示相关参数的图像。这很好,不是问题。但是,当用户退出文本框时,我希望图像恢复为原始图像。我尝试了_Exit()和_AfterUpdate()的事件来实现这一点,虽然如果我更新参数,它可以正常工作,但是如果我不更新参数,它就不起作用。本质上,图像在我进入文本框时会更改,但在我离开时不会更改,除非我更新文本框中的值

有人知道为什么会这样吗?我能做些什么

更新(根据要求使用代码)。我现在发现textbox退出事件没有被触发,因为我的UserForm上有多个框架,并且我正在单击另一个框架中的控件。我举了下面的例子。

以及以下代码

Option Explicit
Dim TextBox1Data As Variant, TextBox2Data As Variant
Private Sub TextBox1_AfterUpdate()
    TextBox1Data = TextBox1.Value
    Debug.Print "AfterUpdate Textbox 1"
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exit Textbox 1"
End Sub
Private Sub TextBox2_AfterUpdate()
    TextBox2Data = TextBox2.Value
    Debug.Print "AfterUpdate Textbox 2"
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exit Textbox 2"
End Sub
Private Sub UserForm_Initialize()
    ComboBox1.List = Array("Item 1", "Item 2", "Item 3", "Item 4")
    ComboBox1.Text = ComboBox1.List(1)
End Sub

如果我点击TextBox1,然后点击ComboBox1或CheckBox1,则会触发TextBox1的退出事件。但是,如果我单击TextBox1,然后单击CheckBox2或CheckBox3,则不会触发该事件。我假设这是因为复选框位于不同的框架中。是这样吗?当文本框从一帧移动到另一帧时,是否有方法触发退出事件?

这似乎是一个已知问题-请参阅。我现在没有使用MS建议的设置焦点方法,而是添加了一个用于退出文本框所在帧的事件,例如,使用我的示例代码,我添加了以下内容:

Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exiting Frame"
End Sub
现在发生的情况是,当在Frame1中从一个控件移动到另一个控件时,控件的正常退出事件按预期工作;当从Frame1移动到Frame2时,框架的退出事件工作


希望这能帮助处于同样困境的人。

如果你用你的代码回答你的问题,这会有所帮助。用户如何退出文本框?看起来要么点击用户表单,要么输入另一个文本框。您是否可以对表单使用click事件,对其他文本框使用Enter?类似地对待其他控件。我们需要查看您的代码,因为
Enter
Exit
事件在一个带有两个文本框和一个按钮的全新表单上确实会按预期触发。我的猜测是,您要么手动键入事件签名,但它们没有被调用,要么重命名了控件,而现在处理程序只是死代码。无论哪种方式,将插入符号放在每个事件处理程序中,并验证代码窗格顶部的左侧下拉列表中没有显示“(常规)”(应该是文本框控件的名称)。
AfterUpdate
如果值未更新,则不触发有意义,不是吗?@SmileyFtW-我试图对表单使用click事件,但也不起作用。正如我所说,如果我真的更改了文本框的内容,一切都会正常工作。如果我只是简单地点击进入并再次点击退出,它似乎会触发_Enter事件,但不会触发_Exit事件。