【问题标题】:VBA UserForm: Unexpected behaviour after using SetFocus on a TextBoxVBA UserForm:在 TextBox 上使用 SetFocus 后出现意外行为
【发布时间】:2021-12-21 22:57:50
【问题描述】:

我有一个用户窗体,它显示活动工作表中各种单元格的文本内容,并有一个文本框允许用户输入新信息。

只要用户通过 Workbook_SheetSelectionChange 事件选择新的单元格/范围,UF 就会自动更新。

在 UF 更新程序(UF 代码模块中的公共子程序)结束时,我使用 TextBoxName.SetFocus(连同 .SelStart = .TextLenght)将焦点设置在文本框上,为用户启动做好准备打字。

现在,当 UF 通过 UserForm_Activate 事件激活时,此更新过程也会运行。

这是我的问题

当 UF 激活时,焦点成功设置在 TextBox 上,光标在文本末尾可见,并且我输入的任何内容都按预期输入到 TextBox 中。

但是,如果我单击一个新单元格,该单元格运行相同的更新过程,但 Workbook_SheetSelectionChange 事件除外,会发生一些奇怪的事情。从技术上讲,焦点在 TextBox 上,但光标不可见。空格键、Enter 和 Backspace 都按预期工作,但字母和数字键不能。 IE。我可以删除文本或点击 Enter 以添加新行,但如果我点击任何其他数字/字母键,则没有任何反应,直到我再次使用鼠标单击 TextBox。

我尝试将过程移出 UF 模块,在不同的地方使用 .SetFocus,包括在 Workbook_SheetSelectionChange 调用更新过程之后,但没有任何效果。

我还能尝试什么?

提前致谢!

【问题讨论】:

  • 您是否尝试过仅激活表单(并让UserForm_Activate 处理程序执行其操作)而不是从外部更新它?
  • 我也会尝试将焦点设置在 UF 中的另一个对象上,然后返回到文本框。
  • 我还没有找到在加载后触发UserForm_Activate 事件的方法。我可能没有提到 UF 是模态显示的,所以我不能使用 .Show 例如
  • 怎么样 1) 切换和重新切换 .Enabled 属性或 2) 通过任何其他接受焦点的控件(包括命令按钮或框架)显式失去焦点并再次重置焦点:-) c.f. Validation message of textbox entry on modeless form interrupts text selection
  • 行得通!实际上,循环 .Enabled.Visible 属性,或者将 .SetFocus 移开然后回到控件上似乎都同样有效:) 你想把这个作为答案发布吗?

标签: excel vba userform setfocus


【解决方案1】:

让文本框再次协作

某些(窗口)进程可能会阻碍.SetFocus 显示完整效果,例如在文本框验证期间显示的MsgBox 窗口甚至是 在您的情况下单击工作表单元格时由Workbook_SelectionChange 事件引发的完整更新过程。 尽管您明确设置了焦点,或者更确切地说因为内部控件没有失去(完全)焦点, 因此控件的焦点不会/无法重置,因为用户窗体已经“拥有”它。

要克服不满意的情况,你可以

  1. 切换和重新切换.Enabled 属性或替代
  2. 通过任何其他接受焦点的控件(也包括命令按钮或框架)显式失去焦点并再次重置焦点。

相关链接

为了获得更多见解,我建议查看Validation message of textbox entry on modeless userform interrupts text selection 给出的解释

致谢CommonSense

【讨论】:

    【解决方案2】:

    顺便说一句,我正在努力解决所有相同的症状,但没有一个规定的答案有效。它只发生在一个文本框上。在搞砸了 2 个小时并阅读了以上所有内容(和链接)并尝试了各种建议后,我决定删除有问题的文本框并重新创建它。当我删除有问题的文本框时,我意识到我以某种方式设法在同一位置放置另一个文本框(我认为是复制/过去打嗝)。当我浏览我的字段时,它会转到预期目标后面的通用名称“TextBox2”,但是当我单击该框时,它会正确设置焦点。不用说,删除虚假文本框解决了我的问题。如果有人遇到类似问题,我会发布此“答案”。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多