简单的Word VBA替换宏

3

我正在尝试搜索Word文档并用指定的值替换特定字符串(现在使用硬编码值“Special”)。宏明显显示它能够在Word编辑器中找到正确的文本,但替换功能不起作用。这是我第一次使用VBA,所以如果可能的话,我需要一些帮助。以下是宏代码...

    Sub Test()
'
' Test Macro
'
'
    Documents.Open FileName:="C:\Users\abensch\Documents\NANTDocMerge\DMID - Backups\System Clock Ability.docx", _
        ConfirmConversions:=False, _
        ReadOnly:=False, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", _
        Revert:=False, WritePasswordDocument:="", _
        WritePasswordTemplate:="", _
        Format:=wdOpenFormatAuto, _
        XMLTransform:=""
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Special"
        .Replacement.Text = "Potato"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute

End Sub

我不确定在Select.Find中大多数指定的参数是否是必需的,移除它们似乎并不会影响宏的性能,但我认为最好保留它们以确保安全。我在想这可能是一个Word格式问题,尽管我尝试使用两个ClearFormatting调用来删除所有格式。

1个回答

4
如果你想要进行全局替换,请修改:
Selection.Find.Execute

to

Selection.Find.Execute Replace:=wdReplaceAll

如果您只想替换第一个实例而不是所有实例,则可以使用此方法。
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "Special"
    .Replacement.Text = "Potato"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
With Selection
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseStart
    Else
        .Collapse Direction:=wdCollapseEnd
    End If
    .Find.Execute Replace:=wdReplaceOne
End With

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接