ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 在有控件的文档中,正则如何精准锚定目标位置?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-26 16:44 | 显示全部楼层
lss001 发表于 2024-8-26 14:03
根据上楼分析
大概有以下四种解决方案
一加上控件所占用的字节数

经过你的分析和对上一次测试的代码检查,发现很关键的一句“ 'm = mt.FirstIndex + r + s: n = mt.Length - s”注释掉了,而采用没有控件的“m = mt.FirstIndex : n = mt.Length”,所以产生了误差,更正后测试,达到效果了!!
谢谢你的尝试,帮助,辛苦了!
只是还有几点不明白:
1、两个回车符,是指控件和表格各一个吧?
2、如果控件也有一个回车符,那么它和其终止符又是什么关系?他们的位置是怎样的?
3、n = mt.Length为正则匹配的目标文本的长度,而在正则匹配锚定的目标文本内有没有控件,为什么又要减去控件的文本长度(s),从而写成n = mt.Length-s?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-26 16:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lss001 发表于 2024-8-25 10:54
看下正则参考链接36楼有讲到\r与$的区别
https://club.excelhome.net/forum.php?mod=viewthread&tid=112 ...

这个链接什么都没有,只有一个手机登录的界面。
如图:
image.jpg

TA的精华主题

TA的得分主题

发表于 2024-8-26 17:17 来自手机 | 显示全部楼层
本帖最后由 lss001 于 2024-8-26 17:29 编辑
weiyingde 发表于 2024-8-26 16:48
这个链接什么都没有,只有一个手机登录的界面。
如图:


有些链接需要用手机打开
电脑打不开用手机
手机打不开用电脑
这链接的帖子2017年4月即6年前
350多楼有你的回帖

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-26 17:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
针对21楼的问题,求开悟

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-26 17:35 | 显示全部楼层
这是我在网上查到的资料,发在这儿,普及一下,便己也便人。
https://zhuanlan.zhihu.com/p/369945571
从根本上来看,Word 文档不过是一个巨大的字符流。人们倾向于认为文档是单词、句子和段落的集合。但实际上,文档就是一些字符。每个字符都有一定的作用。某些字符是字母、空格或制表符,另一些字符是段落标记或分页符。
但是,文档中如果有表格:(罪魁祸首:单元格结束符),正则中用 \x07 或者 \u0007 来表示这个字符。
1、把整个文档当做“目标文本”的时候,word中自身的find对象是找不到这个“罪魁祸首:单元格结束符”,因此word在统计字符的时候这个“单元格结束符”是“没有统计的”。但是正则又能查找到这个字符,那么就存在一个矛盾:range对象的Start属性是从文档(注意:这时候整个文档作为一个目标字符串)最开始0计算到整个文档未的数量而通过正则查找到的对象属性FirstIndex的起始位置与range对象的Start属性得到的位置就不准确了,所以会出错!
2、把每一个段落当做“目标文本”的时候,情况就不一样了!那就定位准确了,不详述了。
3、所以在word中使用正则的时候注意:什么时候把word中什么对象(文档、段落、单元格等)作为正则的目标文本来进行查找是至关重要的!!!
4、本帖主要是阐述wordvba中怎么充分利用正则对象来扩展find对象的不足。比如这个单元格结束符find对象就无能为力,当然还有find对象无能为力的还比较多:这涉及到word通配符及表达式与正则表达式之间的差别了!!!这个不是本帖的讨论范围了。

TA的精华主题

TA的得分主题

发表于 2024-8-26 17:49 来自手机 | 显示全部楼层
weiyingde 发表于 2024-8-26 17:28
针对21楼的问题,求开悟

长度为什么-s
参考一下前两天14楼代码,
14楼已经把s改成了4而不是3
改为4是因为Chr(1)替换成了空""
原来3是因为Chr(1)替换为了零0
0你也知道在文本中要占位置
而空不需要
替换成了空就是删除了
删除了后面文本就会向前移
也就是后面文本位置全部变了

从上面分析您是否能想到什么?

TA的精华主题

TA的得分主题

发表于 2024-8-26 18:01 来自手机 | 显示全部楼层
weiyingde 发表于 2024-8-26 17:35
这是我在网上查到的资料,发在这儿,普及一下,便己也便人。
https://zhuanlan.zhihu.com/p/369945571
从 ...

20楼就是推荐使用正则匹配结果
不使用原文档返回值

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-26 18:05 | 显示全部楼层
lss001 发表于 2024-8-26 17:49
长度为什么-s
参考一下前两天14楼代码,
14楼已经把s改成了4而不是3

减去4,这个不错。
下面的两个问题呢
1、两个回车符,是指控件和表格各一个吧?
2、如果控件也有一个回车符,那么它和其终止符又是什么关系?他们的位置是怎样的?

TA的精华主题

TA的得分主题

发表于 2024-8-26 18:19 来自手机 | 显示全部楼层
weiyingde 发表于 2024-8-26 18:05
减去4,这个不错。
下面的两个问题呢
1、两个回车符,是指控件和表格各一个吧?

2个回车符,这个应该是您误会了
回车符2和2个回车表示的意思
应该是不同,
14楼写的回车2,指的是回车在正则中占2个字节
您上楼不是查看了知乎文章
说白了正则表示回车就是Ascii码13和0
所以它占2个字节

TA的精华主题

TA的得分主题

发表于 2024-8-26 18:29 来自手机 | 显示全部楼层
weiyingde 发表于 2024-8-26 18:05
减去4,这个不错。
下面的两个问题呢
1、两个回车符,是指控件和表格各一个吧?

还有就是终止符,
是为了好理解而使用的说法
比如回车符13和0
把13理解为回车
把后一字节0理解为终止符

以上
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 18:48 , Processed in 0.033675 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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