在如何用vba实现word的查找替换?一文中我们介绍了用vba实现word的文本的查找替换。
在word中除了文本的查找替换以外,还会遇到格式的查找替换。
我们需要通过格式查找具体的字符,并对查找到的字符执行相应的操作,如批量替换为其它格式,或者批量替换为其它字符等。
比如查找某种字体颜色的文本,然后替换为另一种字体颜色的文本,亦或是查找某种背景色的文本,替换为另一种背景色的文本等。
要在vba中实现按照格式查找替换word文本,可以使用Find对象先设置要查找的格式,再用Replacement对象设置要替换的格式,最后通过Execute方法执行查找替换时,将要查找的文本和要替换的文本都设置为空。
以下代码演示了如何将某种颜色字体的文本替换为无颜色的字体的文本。
Sub QQ1722187970()
Const wdReplaceAll = 2
Dim oRng As Range
Dim oRng1 As Range
Set oRng = Word.Selection.Range
'先判断是否有选中区域,没有选中则表示整个文档
If oRng.Start = oRng.End Then
Set oRng = Word.ActiveDocument.Content
End If
'获取要执行操作的区域的起点和终点,用于查找替换时判断是否超出了选定区域
iStart = oRng.Start
iEnd = oRng.End
Debug.Print oRng.Text
Set oRng1 = oRng
With oRng1.Find
.ClearFormatting
.Font.ColorIndex = wdBlack
With .Replacement
.ClearFormatting
.Font.ColorIndex = wdAuto
End With
.Execute FindText:="", ReplaceWith:="", Replace:=wdReplaceAll
End With
End Sub
以下代码演示了如何将粗体的字符批量添加上括号:
Sub QQ1722187970()
Const wdReplaceAll = 2
Dim oRng As Range
Dim oRng1 As Range
Set oRng = Word.Selection.Range
'先判断是否有选中区域,没有选中则表示整个文档
If oRng.Start = oRng.End Then
Set oRng = Word.ActiveDocument.Content
End If
'获取要执行操作的区域的起点和终点,用于查找替换时判断是否超出了选定区域
iStart = oRng.Start
iEnd = oRng.End
Set oRng1 = oRng
With oRng1.Find
.ClearFormatting
'查找粗体字符
.Font.Bold = True
'每执行一次查找,只要找到了结果,oRng对象会自动变成被找到的内容所在的区域
Do Until .Execute() = False Or oRng1.Start > iEnd Or oRng1.End < iStart
'为字符添加上左右括号
oRng1.Text = "(" & oRng1.Text & ")"
Loop
End With
End Sub


发表评论