【发布时间】:2017-11-15 16:20:37
【问题描述】:
我有一个带有文本框的用户表单。我想在 keyDown 事件之后选择(突出显示)内的文本。
最终用户可以输入的内容有一些限制。如果输入错误,会弹出一条消息,并选择文本框中邀请用户输入内容的文本。
我使用以下代码:
Me.txtbox_add_folder.SetFocus
Me.txtbox_add_folder.SelStart = 0
Me.txtbox_add_folder.SelLength = Len(Me.txtbox_add_folder.Text)
setFocus 不起作用。好像是因为setFocus触发了一系列其他事件see this discussion。
另一个讨论中提出的解决方案是包含DoCmd.CancelEvent 或Cancel = True,这样焦点就不会转到另一个控件,但这些命令在 Excel 上不起作用。
【问题讨论】:
-
请提供足够的代码,以便我们可以尝试复制您的问题。 (我注意到在对答案的评论中您提到了
keyDown事件,但您的问题中没有提到这一点。那么这段代码是在txtbox_add_folder_KeyDown事件中吗?还是在txtbox_add_folder_Change事件中?还是在txtbox_add_folder_Exit事件?还是在哪里?) -
TBH 听起来您只想在
Enter事件中使用您的代码。这似乎可以满足您的“我有一个带有文本框的 excel 用户表单,我想选择(突出显示)中的文本,以便最终用户可以看到要填充的内容。”要求。 (当然,您不需要SetFocus语句。) -
我添加了一些细节。事实上这段代码在
keyDown事件中,并且在这个事件结束时焦点总是丢失并转移到另一个控件。 -
如果您真的不希望用户能够退出文本框,只需在
Exit事件中添加Cancel = True。 -
实际激活 SetFocus 的进一步解决方案可能包括 1. 切换和重新切换 .Enabled 属性,或者 2. 通过任何其他接受焦点的控件(包括命令按钮或框架)显式失去焦点并最终重置再次聚焦。见Unexpected behaviour after using SetFocus on a text box
标签: excel vba userform setfocus