【问题标题】:Excel VBA UserForm TextBox Does Not Recognise ExitExcel VBA 用户窗体文本框无法识别退出
【发布时间】: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 吗?类似地对待其他控件。
  • 我们需要查看您的代码,因为 EnterExit 事件 do 在具有两个文本框和一个按钮。我的猜测是,您要么手动输入了事件签名并且它们没有被调用,要么您已经重命名了控件,现在处理程序只是死代码。无论哪种方式,将插入符号放在每个事件处理程序中,并验证代码窗格顶部的左侧下拉菜单中没有显示“(常规)”(应该是您的 TextBox 控件的名称)。
  • AfterUpdate 如果值未更新则不触发是有道理的,不是吗?
  • @SmileyFtW - 我尝试对表单使用点击事件,但这也不起作用。正如我所说,如果我实际更改文本框的内容,一切都会正常工作。如果我只是简单地单击并再次单击退出,它似乎会触发 _Enter 事件而不是 _Exit 事件。

标签: excel vba userform


【解决方案1】:

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

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

现在发生的情况是,当在 Frame1 内从一个控件移动到另一个控件时,控件的正常 Exit 事件按预期工作,而当从 Frame1 移动到 Frame2 时,框架的 Exit 事件工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多