ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 向前辈们求一个“查找文档中不成对的符号标为红色”的宏

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-7 13:08 | 显示全部楼层
本帖最后由 13907933959 于 2015-11-7 13:17 编辑
413191246se 发表于 2015-11-7 11:51
是的,139,数组里面的元素数值要与第48行代码的数值一样(因为用的是循环控制结构 Do...Loop语句,要准确 ...
师傅好!
下面b = Array放进 147个(元素)VBA窗口就会满行,再多代码就会出现红色。
还有元素数量少的(十多个),数字后面带有空格的,空格也会被替换掉,不知什么原因,元素数量多了(147个),数字后面带有空格的虽可替换,但空格替换不了。


附件.rar

10.08 KB, 下载次数: 18

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-7 16:11 | 显示全部楼层
kqbt 发表于 2015-11-7 12:04
413191246se 辛苦了!惭愧有一段时间都没来学习了,有时看到需要考虑的因素较多的问题就有力不从心的感觉。 ...

版主前辈好!
因晚辈是个外行,遇到问题常常到论坛上寻找答案,或提问让前辈们解答,受益非浅,尤其得到413191246se前辈无以计数次的帮助,解决了许多的难题。以前晚辈也曾多次得到版主前辈的出手相助,深表感谢!这个提问如版主有空,能否请版主前辈编写一个更加完美的宏让晚辈学习受用,晚辈先谢过版主!

TA的精华主题

TA的得分主题

发表于 2015-11-7 21:50 | 显示全部楼层
本帖最后由 kqbt 于 2015-11-7 22:43 编辑
13907933959 发表于 2015-11-7 16:11
版主前辈好!
因晚辈是个外行,遇到问题常常到论坛上寻找答案,或提问让前辈们解答,受益非浅,尤其得到 ...

看了 413191246se 的方法有所启发,换了一种思路,但是代码有点长,供测试:
  1. '======注意======2版
  2. '1 跨段落匹配视为成对
  3. '2 多层嵌套匹配不视为成对
  4. '3 未测试表格中的标点
  5. '================
  6. Sub 标注不成对标点符号()
  7.   Dim Arr(), i As Integer, m As Integer, n As Integer, o As Integer
  8.   Dim wRng As Range, rRng As Range, sRng As Range, tRng As Range
  9.   ActiveDocument.Content.HighlightColorIndex = wdAuto
  10.   Arr = Array(-24146, -24145, -24144, -24143, -24138, -24137, -24136, _
  11.               -24135, -24134, -24133, -24132, -24131, -24130, -24129, _
  12.               -23640, -23639, 40, 41, 60, 62, 91, 93, 123, 125)
  13.   Application.ScreenUpdating = False
  14.   For i = 0 To UBound(Arr)
  15.     Selection.HomeKey wdStory
  16.     Set wRng = Selection.Range
  17.     m = 1: n = 0: o = i Mod 2
  18.     If o = 1 Then
  19.       m = m - 1: n = n - 1
  20.       Set rRng = wRng.Duplicate: GoTo line2
  21.     End If
  22. line1:
  23.     wRng.MoveUntil Chr(Arr(i))
  24.     Set rRng = ActiveDocument.Range(wRng.End, wRng.End + 1).Duplicate
  25.     If rRng = Chr(Arr(i)) Then
  26. line2:
  27.       wRng.MoveUntil Chr(Arr(i + m))
  28.       Set sRng = ActiveDocument.Range(wRng.End, wRng.End + 1).Duplicate
  29.       If sRng = Chr(Arr(i + m)) Then
  30.         Set tRng = ActiveDocument.Range(rRng.End, sRng.Start)
  31.         'tRng.Select
  32.         If InStr(tRng, Chr(Arr(i + n))) Then
  33.           If o = 0 Then
  34.             rRng.HighlightColorIndex = wdBrightGreen
  35.             wRng.SetRange rRng.Start, rRng.End
  36.             GoTo line1
  37.           Else
  38.             wRng.SetRange sRng.Start, sRng.End
  39.             rRng.SetRange wRng.Start, wRng.End
  40.             GoTo line2
  41.           End If
  42.         Else
  43.           If o = 0 Then
  44.             GoTo line1
  45.            Else
  46.              sRng.HighlightColorIndex = wdBrightGreen
  47.              wRng.SetRange sRng.Start, sRng.End
  48.              GoTo line2
  49.            End If
  50.         End If
  51.       Else
  52.         If o = 0 Then
  53.           rRng.HighlightColorIndex = wdBrightGreen
  54.           wRng.SetRange rRng.Start, rRng.End
  55.           GoTo line1
  56.         End If
  57.       End If
  58.     End If
  59.   Next
  60.   Set wRng = ActiveDocument.Content
  61.   With wRng.Find
  62.     .ClearFormatting
  63.     .Replacement.ClearFormatting
  64.     Do While .Execute("^13[0-9一二三四五六七八九十百]@[/))]", , , True, , , True)
  65.       wRng.HighlightColorIndex = wdAuto
  66.       wRng.SetRange wRng.End, ActiveDocument.Content.End
  67.     Loop
  68.   End With
  69.   Application.ScreenUpdating = True
  70.   MsgBox "标注完成!"
  71. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-8 11:46 | 显示全部楼层
kqbt 发表于 2015-11-7 21:50
看了 413191246se 的方法有所启发,换了一种思路,但是代码有点长,供测试:

版主前辈好!
感谢这么快回复!谢谢!
我在例文上试了一下,好象查找的标点符号有遗漏的现象,当然、我是个外行测试的例文可能不规范,请版主前辈有空在上面再测试一下。谢谢!
另外、再向版主前辈报告一下,这几天论坛的网页,常常几个小时打不开或很难打开,今天上午又是如此,不知是怎么会事,而其它的网站一切正常。

附件5.rar

5.16 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2015-11-8 11:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
139:我也是昨晚也打不开论坛,今天也是,直到现在才打开。数组元素具体包括多少我不清楚,另外建议不要太多,还有,元素不必带空格。——黑圈1后面的若干空格,我给你的宏能自动删除,你发新帖完全没有必要。另外,数组元素一定要用双引号括起来,中间以英文逗号分隔。

TA的精华主题

TA的得分主题

发表于 2015-11-8 12:33 | 显示全部楼层
13907933959 发表于 2015-11-8 11:46
版主前辈好!感谢这么快回复!谢谢!我在例文上试了一下,好象查找的标点符号有遗漏的现象,当然、我是个 ...

测试了你上传的附件,未标注的应该都是那些全角的标点符号,记得 413191246se 提到过你的文档部分是全角标点,但之前并未看到你的文档,所以上述代码并未考虑全角标点。

TA的精华主题

TA的得分主题

发表于 2015-11-8 12:37 | 显示全部楼层
版主,139所说的数目字,都是 MS Gothic 中的带圈字符,在代码中都是形如 Chrw(10102)这样的字符,我已经完成了该宏的功能,但 139 现在似乎又要删除这些数目字后面的 ,.,。字符。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-8 13:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2015-11-8 11:57
139:我也是昨晚也打不开论坛,今天也是,直到现在才打开。数组元素具体包括多少我不清楚,另外建议不要太 ...

师傅好!
我整理的这些资料,因在我之前是经很多我师傅的徒弟,不同的人之手的东西,他们对文档和我一样不是内行,可以说是相当的杂乱,不然就不要花这么长的时间来整理。资料标题的后面就有很多很多,象我上传附件中的现象,所以我在元素中才有很多的空格,师傅您给我的大部分是宏,属重型武器,我是用来批量处理,可有些文件中还是要用到手工查找替换,它有几个好处,可分段、向上、向下…等,可处理细微之处。

师傅、那个元素数量少的(十多个),数字后面带有空格的,空格也会被替换掉,元素数量多了(147个),数字后面带有空格的虽可替换,但空格替换不了。是什么原因?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-8 13:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kqbt 发表于 2015-11-8 12:33
测试了你上传的附件,未标注的应该都是那些全角的标点符号,记得 413191246se 提到过你的文档部分是全角 ...

版主前辈好!
啊、是这样,那能否劳请版主前辈考虑全角标点符号,再给一个。

TA的精华主题

TA的得分主题

发表于 2015-11-8 13:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
师傅、那个元素数量少的(十多个),数字后面带有空格的,空格也会被替换掉,元素数量多了(147个),数字后面带有空格的虽可替换,但空格替换不了。是什么原因?

139:你这段话,我不太明白。我建议——在数组中不要放空格,像黑圈1后面带四种空格或,.,。我已经用宏解决了,在你的《手动》帖,测试一下吧!——另外数组中的元素一定要用双引号括起来,另外注意不要放英文单双引号,放就放中文的,以免引起错误。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 00:38 , Processed in 0.023861 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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