ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 奇怪的通配符-------^10

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-11-20 08:58 | 显示全部楼层 |阅读模式
奇怪的通配符 ^10 如果在一篇文章的在每一个字符后面加上一个回车。 通常我会这样做:查找“?”,替换为“^&^p” 今天发现用查找“?^10”,勾选突出显示所有在该范围内的项目。全部查找,关闭,复制、粘贴也行。 而且速度好像还快一点,再次翻开帮助,没找到这个通配符。 ---------------------------------------------------------------------------

图片或图形(仅嵌入) 键入 ^1 脚注标记 键入 ^f 或键入 ^2批注 键入 ^a 或键入 ^5制表符 () 键入 ^t 或键入 ^9手动换行符 () 键入 ^l 或键入 ^11分页符或分节符 键入 ^12(替换时,插入分页符) 段落标记 () 键入 ^13 分栏符 键入 ^n 或键入 ^14正在打开域大括号(当域代码可见时) 键入 ^19 正在关闭域大括号(当域代码可见时) 键入 ^21

--------------------------------------------------------------------------

-经测试(除了上面的以外,在^1-^33之间),大部分都找不到,有的提示是无效的,大部分提示“找不到”,“找不到”的意思就说明他“有的”,只是这篇文档不存在罢了。

当然,只查找^10是找不到的。

难道说在“^1-^33”之间还有很多我们不知道的隐含东西?记得以前一个网友用^26,找到他哪个所谓的空格(就是像“□”这样,但不是我们插入特殊符号找到的那个)。难道Word为了开放,以致留下这么多东东,让人猜不透? 还有一个现象,就是:查找“?”,替换为“^&^p”时,表格的文字会每一个一行,

但用?^10的形式,则不会复制表格。仅仅是复制了汉字,且每一个一行。

一人之力,有限之极,愿感兴趣的朋友,与我们一起讨探一下,这方面的内容。

(网上现在没有相关的东东可参考,只能通过自己摸索。)

TA的精华主题

TA的得分主题

发表于 2005-11-20 09:58 | 显示全部楼层

我看了没看懂,可能是我懂的东西太少了,自己太笨了,楼主能不能再说详细点。

TA的精华主题

TA的得分主题

发表于 2005-11-20 10:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-11-20 10:16 | 显示全部楼层
孔兄:

你的这个发现非常有价值,尽管我也不知道它会产生何种作用,以及会为我们今后的操作带来多大的影响。

我只是根据你的发现,结合我的理解,我推测如下:

一:^10就是CHR(10),也就是换行符,这是可以肯定的.VB中vbCrLf:Chr(13) + Chr(10) 回车符与换行符结合

vbCr:Chr(13) 回车符

vbLf:Chr(10) 换行符

对于这三个常量,大家应该不会太陌生,我们很程序中都用到.其中,在WORD中,vbCrlf=vbcr=^13=^p,也就是说都是段落标记,此处的WORD是指WORD APPLICATION自动解码代码中的VB常量时的转化,一如选择性粘贴为文本时的自动转化.

二:常规查找和复杂查找中不支持^10(单个),但支持其它形式的如^9,^13,我推测WORD是过滤掉了,这不是一个有效的单体,但必须依附于任何文本实体,也就是如,如果是Chr(13),那么它就是VBCRLF,如果是一个汉字,那么,就也依附于汉字之后,但我们看不到这个个体.换句话说,任何一个可见或者非可见的打印字符,其后面都有一个不可见的chr(10),这个可以从查找"?^10"的数量中,予以证实,那么,为什么需要这个^10换行符呢?我的猜测是与WORD的特点结合起来,在WORD对于文本处理特别是换行过程中,自动换行是随时存在的,压缩标点,字符增加页面调整等等,换行随时随地存在,但WORD究竟是如何换行的,如何把^10从不换行到换行的过程,我还不明白.

三:常规查找中,不支持"^?^10"我猜测WORD把它过滤掉了,另外在通配符查找中,如果全文仅有一个字符加一个文档结束标记,则应该有"?^10?^10"一个符合条件,但查找全部时,WORD仍会有两个被发现,甚至"?^10?^10?^10"仍然会有两个被发现,我想,WORD还是设计时没有精当所致,另外,不能查找"^10?",说明WORD中还是刻意规避这个^10的独立存在的.

四:根据你的观察,查找"?"与查找"?^10"的速度有异,甚至后者快于前者,我没有实际测试,假如属实,则我认为是符合WORD的查找惯例的,因为"?"查找过程中,要筛除"^10",而"?^10"相当于精确匹配了每个文字.

五.另外也发现该字符(^10)可以包含于文档结束标记以及段落标记中,但不包含于单元格结束标记和行结束标记中.

以上只是我的猜测,牵强附会甚至强词夺理的成分都有,希抛砖引玉.

[此贴子已经被作者于2005-11-20 10:23:41编辑过]

TA的精华主题

TA的得分主题

发表于 2005-11-20 16:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

各位真是这方面的高手,小妹佩服。

[em17][em17][em17][em17][em17]

TA的精华主题

TA的得分主题

发表于 2005-11-21 11:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

守柔、konggs:

不知你们试验时有没有发现以下两个奇怪现象:

1、复制-粘贴 后,文档的第一个字并没有出现在第一段,第一段是空行,这第一个字却跑到最后去了,并在其下增加了一个空行,我试了几次都是这样的。

2、若文档中间有一个空行,在粘贴后变成了两个,若有三个空行,粘贴后变成四个,以此类推,总之是要多出一个。

这个发现很有意思。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-11-21 13:26 | 显示全部楼层
第一个:确是这样,很有意思。(我复制您上面的话到word,粘贴后,“守”到了后面,而且后面多了一空行。) 第二个:与用老大的推测是吻合的,即每一个后面都隐着一个“^10”,包括“^13”后面也是。

-----------------------------------------------------

但第一个,好像无法自圆其说。

第一个是否与选择样式的以下情况类似?

例如:输入1回车,2回车,3回车,4回车。

定义第一段落(即"1")为标题1样式、第三段落(即"3")为标题1样式;

定义第二段落(即"1")为标题1样式、第四段落(即"3")为标题2样式;

然后,利用格式/样式和格式,在右边的任务窗格中按住Ctrl键,先点选标题1,“选择所有2(此时的“2”,表示在这篇文章中这种样式有2个段落)实例”,再点选标题2(同理),复制,粘贴。

如此:1回车,3回车,2回车,4回车。而不是看不去按选中的范围来排列(即1回车,2回车,3回车,4回车的形式)。

这是否与“^10”的道理有一点点相通?

是否可以这样假设:

第一字及后面的^10(当然^10是看不到的)与其它的字不是同一种“样式”(或假设叫“字式”)?而是“特殊”(“字式”)的一种,且这种“特殊”的“字式”。粘贴时,总要放到末尾,且带一个回车。

以上都是我的瞎猜。仅供“假设”。

可能N年后,有人给一个明确的答案!呵呵

[此贴子已经被作者于2005-11-21 13:34:40编辑过]

TA的精华主题

TA的得分主题

发表于 2005-11-21 14:24 | 显示全部楼层
如意版主的发现很好。但它在WORD中是完全正常的。

我们使用查找中,查找全部时,请注意对话框中的提示,有N个匹配项被WORD找到,而我们所能看到的是一个边续的选定区域,实际上WORD中通过内部处理,分隔为了N项,它们之间,是一个以VBCRLF(WORD中即是段落标记,注意,在数组中的处理,不是CHR(13),而是VBCRLF)。也就是说,每一个符合项,都是用段落标记来分隔的(术语应该是回车加换行符来分隔的),所以,如果你有一个空白段落,当然会变成两个空白段落了。同时也是KONGGS所说的查找中的复制一个道理。

http://club.excelhome.net/viewthread.php?tid=83670

运行以下代码,即可清晰地看到剪贴板中各个数据的情况,以及字符调换的情况(字符在数组中所处的位置,首字符位于数组最后一位)

运行方法,勾选通配符后,查找"?^10",勾选突出显示所有在该范围内查找的项目,查找全部。此时,WORD选中了N个项目,但我们看到的是连续的文本。运行以下代码,在立即窗口中观察它的每个区域(数组元素,此处特指单个文本)

'注意:运行此过程(GetmultiRange2)前必须引用MSForms
'VBE/工具/引用:Microsoft Forms 2.0 Object Library (C:\WINNT\system32\FM20.DLL)
Sub GetmultiRange2()
    Dim MyData As DataObject, MyString As String
    Dim MyText() As String, aString As Variant, SelText As String
    If Selection.Type = wdSelectionIP Then Exit Sub    '如果未选中则退出程序
    Set MyData = New DataObject    '引用新的DataOject
    Selection.Copy    '选定内容复制
    MyData.GetFromClipboard    '从剪贴板复制数据到 DataObject
    MyString = MyData.GetText(1)    '获得DataObject的无格式文本
    MyText = VBA.Split(MyString, vbCrLf)    '取得一个以VBCRLF为分隔符的数组
    For Each aString In MyText    '在该数组中循环
        SelText = SelText & aString   '取得所有选定的文本内容
        Debug.Print aString
    Next
    MsgBox SelText
End Sub
'----------------------

[此贴子已经被konggs于2006-11-17 22:26:14编辑过]

TA的精华主题

TA的得分主题

发表于 2005-11-21 15:41 | 显示全部楼层

如果4楼守柔版主猜得不错的话,不妨看下这个:

如果4楼守柔版主猜得不错的话,不妨看下这个:

3wCVImmf.rar (3 KB, 下载次数: 127)

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-11-21 16:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
To 老大:

我试了一下,确如你所述,而且试验正常通过。

但对于数组的处理,我安全不懂,能否在您的VBA的下一课中,说说这方面的内容?

To 七兄:你的1到32是怎么得来的?插入/符号/十进制,就从32开始啊。

你的符号怎么按alt+x,出来00XX字样,说明应该是十六制22(即32号以后)以后的符号。

奇怪:查找"^31",你的第173号就被查到了。你的173号是从何处得来的,为什么能查到?

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

本版积分规则

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

GMT+8, 2024-11-21 21:53 , Processed in 0.051156 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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