【发布时间】:2021-12-21 22:57:50
【问题描述】:
我有一个用户窗体,它显示活动工作表中各种单元格的文本内容,并有一个文本框允许用户输入新信息。
只要用户通过 Workbook_SheetSelectionChange 事件选择新的单元格/范围,UF 就会自动更新。
在 UF 更新程序(UF 代码模块中的公共子程序)结束时,我使用 TextBoxName.SetFocus(连同 .SelStart = .TextLenght)将焦点设置在文本框上,为用户启动做好准备打字。
现在,当 UF 通过 UserForm_Activate 事件激活时,此更新过程也会运行。
这是我的问题
当 UF 激活时,焦点成功设置在 TextBox 上,光标在文本末尾可见,并且我输入的任何内容都按预期输入到 TextBox 中。
但是,如果我单击一个新单元格,该单元格运行相同的更新过程,但 Workbook_SheetSelectionChange 事件除外,会发生一些奇怪的事情。从技术上讲,焦点在 TextBox 上,但光标不可见。空格键、Enter 和 Backspace 都按预期工作,但字母和数字键不能。 IE。我可以删除文本或点击 Enter 以添加新行,但如果我点击任何其他数字/字母键,则没有任何反应,直到我再次使用鼠标单击 TextBox。
我尝试将过程移出 UF 模块,在不同的地方使用 .SetFocus,包括在 Workbook_SheetSelectionChange 调用更新过程之后,但没有任何效果。
我还能尝试什么?
提前致谢!
【问题讨论】:
-
您是否尝试过仅激活表单(并让
UserForm_Activate处理程序执行其操作)而不是从外部更新它? -
我也会尝试将焦点设置在 UF 中的另一个对象上,然后返回到文本框。
-
我还没有找到在加载后触发
UserForm_Activate事件的方法。我可能没有提到 UF 是模态显示的,所以我不能使用.Show例如 -
怎么样 1) 切换和重新切换
.Enabled属性或 2) 通过任何其他接受焦点的控件(包括命令按钮或框架)显式失去焦点并再次重置焦点:-) c.f. Validation message of textbox entry on modeless form interrupts text selection -
行得通!实际上,循环
.Enabled或.Visible属性,或者将.SetFocus移开然后回到控件上似乎都同样有效:) 你想把这个作为答案发布吗?
标签: excel vba userform setfocus