我有一个用户窗体,用于显示活动工作表中各个单元格的文本内容,并具有一个允许用户输入新信息的文本框。
只要用户通过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调用更新过程之后,但是没有任何效果。
我还能尝试什么?
谢谢!
答案 0 :(得分:1)
再次建立文本框合作伙伴
某些(窗口)过程可能会阻碍.SetFocus
发挥作用,例如在文本框验证期间显示的MsgBox
窗口,甚至
根据您的情况,在单击工作表单元格时,完成由Workbook_SelectionChange
事件引发的更新过程。
尽管您明确地设置了焦点,或者更确切地说是因为该控件在内部没有失去(完全)焦点,
因此控件的焦点将不会/无法重置,因为用户窗体已经“拥有”。
要克服不满意的情况,您可以
.Enabled
属性,或者选择相关链接
要获取更多见解,我建议查看Validation message of textbox entry on modeless userform interrupts text selection
上的说明。