在word中可以使用查找和替换功能批量替换文本、批量替换格式等等。
要在vba中实现word中的查找和替换功能,需要用到Find对象。
如果要执行某个查找动作,可以使用Find对象的Execute方法。
Find对象的Execute方法的语法如下:
expression.Execute (FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)
其中FindText参数表示要查找的文本字符串,如果该参数的值为空字符串,则表示查找格式。
Format参数设置为True,表示要查找格式。
ReplaceWith参数表示要替换的文本字符串,如果为空字符串,则表示把查找到的文本字符串删除。
Replace参数可以有3个取值,wdReplaceAll(2)表示替换全部查找到的字符串,wdReplaceNone(0)一个都不替换,wdReplaceOne(1)只替换第一个找到的字符串。
Find对象的Execute方法可以返回值,如果返回True,表示找到了结果,如果返回为False,则表示未找到结果。
如果用Range对象触发查找替换的动作,则每执行一次Find对象的Execute方法,Range对象都将被重新定义为被找到的结果所在的内容区域。
接下来,详细介绍用vba实现word的查找和替换功能。
一、用vba批量替换word中的某个文本字符串
Sub QQ1722187970()
Const wdReplaceAll = 2
Const wdFindStop = 0
Dim oRng As Range
Set oRng = Word.Selection.Range
'先判断是否有选中区域,没有选中则表示整个文档
If oRng.Start = oRng.End Then
Set oRng = Word.ActiveDocument.Content
End If
With oRng.Find
'批量查找替换“主题”为“测试”
sResult = .Execute(FindText:="主题", replacewith:="测试", Replace:=wdReplaceAll)
End With
End Sub
二、用vba循环所有找到的文本字符串
Sub QQ1722187970()
Const wdReplaceAll = 2
Const wdFindStop = 0
Dim oRng As Range
Set oRng = Word.Selection.Range
'先判断是否有选中区域,没有选中则表示整个文档
If oRng.Start = oRng.End Then
Set oRng = Word.ActiveDocument.Content
End If
With oRng.Find
Do
'先执行一次查找
bResult = .Execute(FindText:="测试")
'如果找到了
If bResult = True Then
'如果找到了,oRng对象重新定义为被找到的内容区域,输出oRng对象的开始和结束位置
Debug.Print oRng.Start, oRng.End
End If
Loop Until bResult = False
End With
End Sub
三、用vba批量替换word中的某个格式
Sub QQ1722187970()
Const wdReplaceAll = 2
Const wdFindStop = 0
Dim oRng As Range
Set oRng = Word.Selection.Range
'先判断是否有选中区域,没有选中则表示整个文档
If oRng.Start = oRng.End Then
Set oRng = Word.ActiveDocument.Content
End If
With oRng.Find
.ClearFormatting
'要查找的格式
.Font.Bold = True
.Text = ""
With .Replacement
.ClearFormatting
.Text = ""
'要替换的格式
.Font.Bold = False
.Font.ColorIndex = wdDarkBlue
End With
bResult = .Execute(Format:=True, Replace:=wdReplaceAll)
End With
End Sub
四、用vba循环所有找到的格式文本
Sub QQ1722187970()
Const wdReplaceAll = 2
Const wdFindStop = 0
Dim oRng As Range
Set oRng = Word.Selection.Range
'先判断是否有选中区域,没有选中则表示整个文档
If oRng.Start = oRng.End Then
Set oRng = Word.ActiveDocument.Content
End If
With oRng.Find
.ClearFormatting
'要查找的格式
.Font.Bold = True
.Text = ""
Do
'先执行一次查找
bResult = .Execute(FindText:="", Format:=True)
'如果找到了
If bResult = True Then
'如果找到了,oRng对象重新定义为被找到的内容区域,输出oRng对象的开始和结束位置
Debug.Print oRng.Start, oRng.End
End If
Loop Until bResult = False
End With
End Sub
五、在excel vba中调用word的查找替换功能
Sub QQ1722187970()
Const wdReplaceAll = 2
Dim oRng, oWord, oDoc
Set oWord = VBA.CreateObject("Word.Application")
Set oDoc = oWord.Documents.Add
With oDoc
Set oRng = .Content
With oRng.Find
.Execute FindText:=oWK.Range("b" & i).Value, ReplaceWith:=oWK.Range("c" & i).Text, Replace:=wdReplaceAll
End With
End With
End Sub


发表评论