ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 567|回复: 16

[求助] 文本框输入内容并回车后,选中该文本框内容,不要跳转到其他地方。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-30 12:15 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 imdouba 于 2024-3-30 12:16 编辑

希望实现的目标,在一个文本框中输入内容并回车后,焦点不要跳转到其他控件,然后选中这个文本框的内容。


在制作的过程中,遇到了敲回车焦点跳转的问题。这个问题困扰很久,尝试了tabindex属性、setfocus功能都没有实现。

思路:由于工作用的vba已经涉及较多控件和代码,因此对调试产生很大困扰,为了找到问题的根源,决定从最简单的情况开始,逐步增加变量,在出现问题的第一时间分析原因。
第一步,构建只含一个文本框的窗体,测试selstart和sellength,不需要setfocus属性就可以实现点回车选中框中文本;
第二步,增加变量,即增加一个文本框,至此问题再次出现,且setfocus到自身无效,这说明问题出在excel本身的机制上,且这个机制的优先级较高;
第三步,搜索原因,关于这一点分别向Gemini和Copilot求助,Gemini提出用KeyPass、Change和GotFocus事件解决(经测试无效),Copilot提出在excel选项中关闭“按 Enter 键后移动所选内容” 功能(经测试无效)。
第四步,猜想敲回车时是否触发类似tab的跳转,尝试关闭其他控件的tabstop属性来避免跳转,成功。
总结,这种防止跳转的方法很傻瓜式,虽然实现了锁定焦点并自动选取文本的目标,但影响了正常的跳转需求。不知道有没有更好的办法解决。经进一步测试,setfocus依然有效,在另一个框内使用该功能成功。
  1. Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  2.     ' 检测回车键是否被敲击
  3.     If KeyCode = vbKeyReturn Then
  4.         ' 选中文本框1中的内容
  5.         TextBox1.SelStart = 0
  6.         TextBox1.SelLength = Len(TextBox1.Text)
  7.     End If
  8. End Sub

  9. Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  10.     ' 检测回车键是否被敲击
  11.     If KeyCode = vbKeyReturn Then
  12.         ' 设置焦点到文本框1并选中框中的内容
  13.         TextBox1.SetFocus
  14.         TextBox1.SelStart = 0
  15.         TextBox1.SelLength = Len(TextBox1.Text)
  16.     End If
  17. End Sub
复制代码
问题又来了,当我满以为找到了解决方案,而把工作文件中的其他控件设置tabstop=false时,发现需要的那个文本框TxtPostNb依旧无法获取焦点并选中内容。我们的生产环境下,需要在这个文本框内用扫码枪扫入邮件面单号,无论单号正确与否,扫码后必须返回该文本框并且选中文本内容(以便录入下一个数据),如果实现不了就进行不下去了。
因此求助大佬,请大佬帮忙看看该怎么办。期待得到您的帮助,非常感谢。
[url=]退运邮件核销系统开发.zip[/url]

退运邮件核销系统开发.zip

180.66 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2024-3-30 13:22 | 显示全部楼层
本帖最后由 prome3 于 2024-3-30 13:45 编辑

在 TextBox 的 Exit 事件中用 Cancel = True

TA的精华主题

TA的得分主题

发表于 2024-3-30 14:44 来自手机 | 显示全部楼层
扫码后必须返回该文本框并且选中文本内容(以便录入下一个数据)

为啥要返回选中?

TA的精华主题

TA的得分主题

发表于 2024-3-30 14:45 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zpy2 发表于 2024-3-30 14:44
扫码后必须返回该文本框并且选中文本内容(以便录入下一个数据)

为啥要返回选中?

一个文本框中输入内容并回车

是不是扫码枪多加了一个回车?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-30 17:04 来自手机 | 显示全部楼层
zpy2 发表于 2024-3-30 14:44
扫码后必须返回该文本框并且选中文本内容(以便录入下一个数据)

为啥要返回选中?

单号输入框只有一个,下一个数据就需要把它前面的数据覆盖掉,因此,需要前一个数据是选中状态

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-30 17:06 来自手机 | 显示全部楼层
本帖最后由 imdouba 于 2024-3-30 19:42 编辑
zpy2 发表于 2024-3-30 14:45
一个文本框中输入内容并回车

是不是扫码枪多加了一个回车?

是这样的,我们日常使用过程当中用扫码枪在扫描的时候在excel里边每输入一个数据就会逐条的往下走,因此我判断他是一个输入单号的过程加回车。退一步讲,如果手输的话,也是希望输完单号后能重新选中输入的内容,方便新的内容直接覆盖。

TA的精华主题

TA的得分主题

发表于 2024-3-30 18:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
扫码枪的设计一般都这样的,模拟用户点击键盘,最后发送回车或者制表符。条形码扫完后,如果要让文本框保留焦点,可以这么做:
扫码枪扫描后保留焦点.png

关键点在于拦截 Exit 事件,并且给出是否退出当前文本框的条件
(截图中的子过程仅作示例,你知道这个意思就行了,可以根据自己实际情况修改)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-30 23:23 | 显示全部楼层
prome3 发表于 2024-3-30 18:55
扫码枪的设计一般都这样的,模拟用户点击键盘,最后发送回车或者制表符。条形码扫完后,如果要让文本框保留 ...

谢谢大佬,学习了,明天试试看,辛苦你了。

TA的精华主题

TA的得分主题

发表于 2024-3-31 06:55 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
imdouba 发表于 2024-3-30 17:04
单号输入框只有一个,下一个数据就需要把它前面的数据覆盖掉,因此,需要前一个数据是选中状态

覆盖?直接清空就行了吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-31 11:07 | 显示全部楼层
zpy2 发表于 2024-3-31 06:55
覆盖?直接清空就行了吧。

直接清空了也可以的,只是如果是出错等情况,选中状态方便再看一眼错在哪里。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-28 03:18 , Processed in 0.036379 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表