ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 用正则表达式替换WORD段尾空格出现的奇怪现象

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-3-6 09:40 | 显示全部楼层 |阅读模式
     请教各位大侠专家!
    用正则表达式替换段尾空格时,如果文字段落之后紧跟着表格,则被替换的文字所在段落会跑到表格中去,除此之外其他情况却是正常的。百思不得其解,烦请各位老师指点。

Sub 删除段尾空格()
Dim i As Paragraph, mt, oRang As Range, n%, m%
Set regx = CreateObject("vbscript.regexp")
With regx
        .Global = True: .IgnoreCase = False: .MultiLine = True
        .Pattern = "\s+(\r)$"    '删除段落尾部的空格,如果没有\r,将会将回车符一并作为空格处理了。
        For Each i In ActiveDocument.Paragraphs  '在遍历各个段落
                For Each mt In .Execute(i.Range.Text)    '遍历所匹配的各个文本
                        m = mt.FirstIndex: n = mt.Length - 1 '查找的起始位置(从0开始计数)、长度
                        Set oRang = ActiveDocument.Range(i.Range.Start + m, i.Range.Start + m + n)  '定位查找到的文本在整个文章中的起始位置、终止位置
                        i.Range.Text = .Replace(i.Range.Text, "$1")
                Next
        Next        
End With
End Sub




运行之前的截图.jpg
运行之后的截图.jpg

删除段尾空格.zip

41.57 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2019-3-6 09:55 | 显示全部楼层
好好学习一下段落和表格,自己领悟!

TA的精华主题

TA的得分主题

发表于 2019-3-15 21:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-16 19:46 | 显示全部楼层
借用阿杜的代码
Sub Word文档中查找替换()
    Dim col As New Collection, k&
    Dim i As Paragraph, mt, oRang As Range, n%, m%
    With CreateObject("vbscript.regexp")
        .Pattern = "\s+(?=\r)" '这里各显其能输入正则表达式(根据自己的需求)
        .Global = True: .IgnoreCase = False: .MultiLine = True
        For Each i In ActiveDocument.Paragraphs
            For Each mt In .Execute(i.Range.Text)
                k = k + 1
                m = mt.FirstIndex: n = mt.Length
                Set oRang = ActiveDocument.Range(i.Range.Start + m, i.Range.Start + m + n)
                col.Add oRang, CStr(k)
            Next
        Next
    End With
    For j = 1 To col.Count
        col(j) = "" '替换为字符(根据自己需要)
    Next
End Sub
可以实现你的功能

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-20 17:18 | 显示全部楼层
谢谢yhs185的回复。但我运行代码检验,发现运行后文档没有任何变化。

TA的精华主题

TA的得分主题

发表于 2019-3-21 22:45 | 显示全部楼层
本帖最后由 19820713chen 于 2019-3-21 22:48 编辑

用这段代码你会感觉比正则查找快很多

TA的精华主题

TA的得分主题

发表于 2019-3-21 22:49 | 显示全部楼层

用这个代码

本帖最后由 19820713chen 于 2019-3-21 22:52 编辑

Sub 去除段尾空格()
   Selection.Find.ClearFormatting
   Selection.Find.Replacement.ClearFormatting
   With Selection.Find
       .Text = "[^s" & vbTab & " " & ChrW(160)& ChrW(255) & ChrW(8204) & _
           ChrW(8205) & ChrW(8194) & ChrW(8195) & ChrW(8197) &" " & ChrW(61543 _
           ) & "

TA的精华主题

TA的得分主题

发表于 2019-3-25 18:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
GONG2816 发表于 2019-3-20 17:18
谢谢yhs185的回复。但我运行代码检验,发现运行后文档没有任何变化。

在我这里测试,完美达到你的需求

TA的精华主题

TA的得分主题

发表于 2019-3-29 12:54 | 显示全部楼层
4楼老师代码 我测试是OK的。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-30 12:55 | 显示全部楼层
感谢谢谢yhs185老师。再次运行,确认能完善解决问题。
您的回复中,下面的这个代码如何理解?为何这样处理就能解决这个问题,而我原来的代码却不行,麻烦指点一下。
               col.Add oRang, CStr(k)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 11:13 , Processed in 0.028656 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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