Excel VBA UserForm文本框无法识别退出

希望这对那里的某个人来说很简单。我有一个带有大量用于输入参数的文本框的Excel VBA UserForm。此外,用户表单上还有一个图像。当用户单击文本框时,通过触发_Enter()事件以显示相关参数的图像来更改UserForm上的图像。这工作正常,这不是问题。但是,随着用户退出文本框,我希望图像恢复为原始图像。我已经尝试使用_Exit()和_Afterupdate()的事件来使此工作有效,尽管如果我更新参数可以正常工作,但是如果我不更新参数则无法正常工作。本质上,图像会随着我进入文本框而改变,但不会改变,除非我在文本框中更新值。

有人知道为什么会这样吗,我对此有什么能力?

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

Excel VBA 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的Exit事件。但是,如果我单击TextBox1,然后单击CheckBox2或CheckBox3,则不会触发该事件。我认为这是因为CheckBoxes位于不同的框架中。是这样吗从一帧移到另一帧时,是否可以触发TextBox的Exit事件?

hrbwyj 回答:Excel VBA UserForm文本框无法识别退出

这似乎是一个已知问题-请参见Microsoft Q210734。现在,我没有使用MS建议的Set Focus方法,而是添加了一个Event来退出文本框所在的Frame,例如使用示例代码,我添加了以下内容;

Private Sub Frame1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Debug.Print "Exiting Frame"
End Sub

现在发生的是,当在Frame1中从一个控件移动到另一个控件时,该控件的正常Exit事件按预期工作,而在从Frame1移到Frame2时,该帧的Exit事件起作用。

希望这对处于同样困境的人有所帮助。

本文链接:https://www.f2er.com/3157511.html

大家都在问