VBA Excel 用户窗体:光标未显示在活动的 texbox 中

VBA Excel UserForm: Cursor does not show in active texbox

提问人:Renaat 提问时间:10/17/2023 更新时间:10/17/2023 访问量:46

问:

在 Excel 中的用户窗体中,我有一个名为 ScanInput_Fx 的 TextBox,它重复用于输入数据。每次处理数据时,ScanInput_Fx都会被清空,焦点会回到它身上。或者更好:它保持ScanInput_Fx,因为我使用了_BeforeUpdate事件的 Cancel = True 选项。但是,无论出于何种原因,有时光标不会显示。我已经进行了测试,以确保焦点实际上ScanInput_Fx(通过在消息框中调用 ActiveControl 的名称并将文本从 VBA 代码推送到 ActiveControl 中),它确实如此。

用户唯一可以做的就是再次手动单击ScanInput_Fx。但是,这并不是一个真正的选择,因为用户正在使用扫描仪输入数据,并且他不在计算机附近。

我已经阅读了很多关于此的帖子,但没有找到可行的解决方案。我试过将焦点转移到另一个控件并回到ScanInput_Fx,但这也不起作用。奇怪的是,当我省略 Cancel = True 选项(_BeforeUpdate事件)时,焦点不会跳到窗体上的下一个 Tabposition,即使我在 VBA 中对其进行硬编码时也不会跳到。不确定这两件事是否相关,但也许它确实给某人敲响了警钟。

一些额外的上下文(因为我无法在此处显示所有代码)。这是 _BeforeUpdate 事件的代码的作用:

  • 它检查在 ScanInput_Fx 中输入的值是否对数组中的查找有效
  • 它将计数器 1 添加到窗体上的另一个控件,该控件与在 ScanInput_Fx 中输入的数据相对应
  • 它将ScanInput_Fx值放在基础 Excel 工作表的单元格中,并将该工作表另存为 PDF

所以,在我看来,没有什么非常壮观的。唯一可能特别的是,窗体上的大多数控件都是由函数动态创建的。但是,显示这种不稳定行为ScanInput_Fx在屏幕上是固定的(因此不是动态创建的)

会有人对我能做什么或我可以从哪里开始寻找答案有一些建议吗?

提前感谢您的帮助。

雷纳特

Excel VBA 焦点 用户窗体 BeforeUpdate

评论

1赞 Siddharth Rout 10/17/2023
在黑暗中开枪(因为我看不到你的代码)。你如何显示你的用户表单?我相信你正在使用(模态)。尝试。这会把焦点带回来吗?.Showfrm.Show vbmodeless
0赞 vbakim 10/17/2023
我会考虑使用 TextBox 的 _Enter 事件来设置光标位置并确保 TextBox 具有焦点。如下图所示。私有子 ScanInput_Fx_Enter() Me.ScanInput_Fx.SelStart = 0 结束子
0赞 T.M. 10/17/2023
(部分)有用的 VBA 用户窗体 - 在文本框上使用 setfocus 后出现意外行为

答: 暂无答案