【发布时间】:2020-03-02 03:29:01
【问题描述】:
希望这对外面的人来说是一个简单的。我有一个 Excel VBA 用户窗体,其中包含许多用于输入参数的文本框。此外,用户窗体上还有一个图像。当用户单击文本框时,通过触发 _Enter() 事件来更改用户窗体上的图像以显示相关参数的图像。这工作正常,不是问题。但是,当用户退出文本框时,我希望图像恢复为原始图像。我已经尝试了 _Exit() 和 _AfterUpdate() 的事件来完成这项工作,虽然如果我更新参数它工作正常,但如果我不更新参数它就不起作用。本质上,图像会在我输入文本框时发生变化,但不会在我离开时发生变化,除非我更新文本框中的值。
有没有人知道为什么会这样以及我能做些什么?
更新(使用请求的代码)。我现在发现文本框退出事件没有被触发,因为我的用户窗体上有多个框架,并且我正在单击不同框架中的控件。我做了下面的例子。
以及下面的代码;
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,则不会触发该事件。我认为这是因为复选框位于不同的框架中。是这样吗?从一帧移动到另一帧时,有没有办法触发 TextBox 的退出事件?
【问题讨论】:
-
如果您 edited 用您的代码提出您的问题会有所帮助。
-
用户如何退出文本框?似乎它要么是单击用户窗体,要么是输入另一个文本框。您可以对表单使用 click 事件,对其他文本框使用 _Enter 吗?类似地对待其他控件。
-
我们需要查看您的代码,因为
Enter和Exit事件 do 在具有两个文本框和一个按钮。我的猜测是,您要么手动输入了事件签名并且它们没有被调用,要么您已经重命名了控件,现在处理程序只是死代码。无论哪种方式,将插入符号放在每个事件处理程序中,并验证代码窗格顶部的左侧下拉菜单中没有显示“(常规)”(应该是您的 TextBox 控件的名称)。 -
AfterUpdate如果值未更新则不触发是有道理的,不是吗? -
@SmileyFtW - 我尝试对表单使用点击事件,但这也不起作用。正如我所说,如果我实际更改文本框的内容,一切都会正常工作。如果我只是简单地单击并再次单击退出,它似乎会触发 _Enter 事件而不是 _Exit 事件。