如何用vba实现word的查找和替换功能?

在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

 

       

发表评论