2012-06-13 4 views
3

Word 문서를 검색하고 특정 문자열 ("Special"의 하드 코드 된 값 사용)을 지정된 값으로 바꾸려고합니다. 매크로는 Word 편집기에서 올바른 텍스트를 찾았 음을 분명히 나타내지 만 대체 기능이 작동하지 않습니다. 이것은 내 첫 번째 VBA 경험이므로 가능하면 도움을 받고 싶습니다. 다음 코드는 ... 내가 Select.Find에 지정된 매개 변수의 대부분이 필요하다고 확실하지 않다간단한 단어 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 

매크로, 그리고 그들을 제거하는 매크로의 성능에 영향을하지 않는 것, 하지만 나는 그들을 안전하다고 생각하는 것으로 생각했습니다. 두 개의 ClearFormatting 호출로 모든 서식을 제거하려고했지만 Word 서식 문제 일 수 있는지 궁금합니다.

답변

4

당신이 모두를 교체하고 싶은 경우 변경

Selection.Find.Execute 

당신은 단지 첫 번째 인스턴스를 대체 할 모든 다음이

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

를 사용하지 않으면

Selection.Find.Execute Replace:=wdReplaceAll 

에 감사! 매력처럼 작동합니다. – SwarthyMantooth