2012-06-13 177 views
3

我试图通过Word文档进行搜索,并用指定的值替换特定的字符串(现在使用硬编码值“Special”)。该宏清楚地表明它在Word编辑器中找到了正确的文本,但替换功能不起作用。这是我绝对的第一次VBA体验,所以如果可能的话,我会喜欢一些帮助。下面的代码是宏...简单的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调用删除所有格式。

回答

4

如果你想要做一个替换所有然后更改

Selection.Find.Execute 

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 
+0

谢谢!奇迹般有效 – SwarthyMantooth