我有一个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调用更新程序之后,但没有任何作用。
我还能尝试什么?
提前致谢!
使文本框再次合作
某些(窗口)进程可能会阻碍.SetFocus
显示完整效果,例如在文本框验证期间显示的MsgBox
窗口,甚至是Workbook_SelectionChange
事件在您单击工作表单元格时引发的完整更新过程。虽然您明确设置了焦点,或者更确切地说因为内部控件没有丢失(完全)焦点,因此控件的焦点将不会/不能重置,因为Userform已经“拥有”它。
要克服令人不满意的情况,你可以
.Enabled
属性或者相关链接
为了获得更多见解,我建议您查看Validation message of textbox entry on modeless userform interrupts text selection上的解释