VBA 用户窗体:在文本框上使用 SetFocus 后出现意外行为

VBA UserForm: Unexpected behaviour after using SetFocus on a TextBox

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

只要用户通过 Workbook_SheetSelectionChange 事件选择新的 cell/range,UF 就会自动更新。

在 UF 更新程序结束时(UF 代码模块中的一个 public 子)我使用 TextBoxName.SetFocus(连同 .SelStart = .TextLenght)将焦点设置在文本上框,准备好让用户开始输入。

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

这是我的问题

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

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

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

我还能尝试什么?

提前致谢!

让文本框再次合作

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

克服不尽如人意的情况你可以

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

相关link

为了获得更多见解,我建议查看

中给出的解释

致谢CommonSense

顺便说一句,我一直在努力解决所有相同的症状,但是 none 的规定答案有效。它只发生在一个文本框上。在弄乱了 2 个小时并阅读了以上所有内容(和链接)并尝试了各种建议之后,我决定删除有问题的文本框并重新创建它。当我删除有问题的文本框时,我意识到我不知何故设法在同一位置放置了另一个文本框(我认为 copy/past 打嗝)。当我在我的字段中切换时,它会转到预期目标后面的通用名称“TextBox2”,但是当我单击该框时,它会正确设置焦点。不用说,删除虚假文本框解决了我的问题。我发布这个“答案”以防有人遇到类似问题。