本帖最后由 duquancai 于 2016-11-10 20:43 编辑
一直以来,大家都熟悉WordVBA中可以创建正则对象,利用强大的正则表达式来处理字符,但是大家都熟悉Word文档都是含有诸多的格式、样式以及表格等,虽然这个正则对象是处理字符串之王,但是苦于只能处理“纯文本”,大家既爱又恨! 鉴于以上情况,本帖就是要解决WordVBA中大家既爱又恨正则对象,本帖解决在Word文档含有诸多的格式、样式以及表格等而不改变这些格式、样式及表格等前提下在WordVBA中创建正则来解决两大类型问题:1、修改格式,2、查找并替换字符 前条件:在Word文档含有诸多的格式、样式以及表格等,以下代码在不对原文档做修改下进行。
1、修改格式
- Sub Word文档中修改格式()
- Dim i As Paragraph, mt, oRang As Range, n%, m%
- With CreateObject("vbscript.regexp")
- .Pattern = "^第[^条]+条" '这里各显其能输入正则表达式(根据自己的需求)
- .Global = True: .IgnoreCase = False: .MultiLine = True
- For Each i In ActiveDocument.Paragraphs
- For Each mt In .Execute(i.Range.Text)
- m = mt.FirstIndex: n = mt.Length
- Set oRang = ActiveDocument.Range(i.Range.Start + m, i.Range.Start + m + n)
- oRang.Bold = True '字符加粗,有一系列的修改格式(根据自己的需求)
- Next
- Next
- End With
- End Sub
复制代码 2、查找替换
- Sub Word文档中查找替换()
- Dim col As New Collection, k&
- Dim i%, mt, oRang As Range, n%, m%
- With CreateObject("vbscript.regexp")
- .Pattern = "" '这里各显其能输入正则表达式(根据自己的需求)
- .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
复制代码 注:关于正则表达式的语法不在本帖讨论范围!!!
|