VBA UserForm:在TextBox上使用SetFocus后出现异常行为

时间:2019-03-05 20:32:47

标签: excel vba userform setfocus

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

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

在UF更新过程结束时(UF代码模块内的公共子程序),我使用TextBoxName.SetFocus(以及.SelStart = .TextLenght)将焦点设置在文本框中,以供用户启动

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

这是我的问题

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

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

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

我还能尝试什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

再次建立文本框合作伙伴

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

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

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

相关链接

要获取更多见解,我建议查看Validation message of textbox entry on modeless userform interrupts text selection

上的说明。

致谢CommonSense