VBA UserForm:在TextBox上使用SetFocus后出现意外行为

问题描述 投票:1回答:1

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

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

在UF更新过程结束时(UF代码模块中的公共子),我使用TextBoxName.SetFocus(以及.SelStart = .TextLenght)将焦点设置在文本框上,为用户开始输入做好准备。

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

这是我的问题

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

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

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

我还能尝试什么?

提前致谢!

excel vba userform setfocus
1个回答
1
投票

使文本框再次合作

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

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

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

相关链接

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

致谢CommonSense

© www.soinside.com 2019 - 2024. All rights reserved.