2014-04-11 9 views
0

내 단어 문서를 검색하고 APPENDIX3 단어를 찾은 다음이 코드를 찾아서 앞뒤에 공백을 삭제합니다 (이 경우에는 섹션 나누기). 그런 다음 숫자 3을 1 씩 줄이고 for 루프의 맨 위로 돌아가서 APPENDIX2를 검색하고 원하는 항목을 삭제합니다. 그것은 APPENDIX1에서 끝나는 3 번 반복됩니다. 유일한 문제는 APPENDIX3 항목 만 삭제한다는 것입니다. 매크로를 재실행하면 APPENDIX2와 APPENDIX2 만 삭제됩니다. 등등. 증가하고 있지만 선택 사항이 지워지지는 않습니다. 반복 할 때마다 코드를 수정하고 매번 다른 텍스트를 선택할 수있는 방법에 대한 제안 사항은 무엇입니까?for 루프의 단어 텍스트 선택

Sub RemoveAppendices() 
Dim i As Integer 
Application.ScreenUpdating = False 
Selection.HomeKey Unit:=wdStory 
'Cntr = 3 
'For i = 1 To 3 
For i=3 to 1 step -1 
    With Selection.Find 
     .ClearFormatting 
     .Text = "APPENDIX" & Cntr 
     If Selection.Find.Execute Then 
      Selection.Select 
      Selection.Delete 
      With Selection 
       .EndKey Unit:=wdStory 
       .TypeBackspace 
       .Delete 
      End With 
     End If 
    End With 
    'Cntr = Cntr - 1 

Next i 
End Sub 
+0

컬렉션의 일부를 삭제할 때 마지막 항목부터 처음으로 루프를 실행해야합니다. 그러므로'For i = 3 to 1 step -1'과 같은 것을 시도해보십시오. 또한,'Cntr = Cntr -1' 대신'i'를 사용할 수 있습니다. –

+0

변경 사항을 반영하기 위해 위의 코드를 수정했으며 실제로 더 효율적입니다 (감사합니다). 그러나 발견 된 초기 텍스트를 지우고 다음 텍스트 값을 찾고 If 문을 통해이 선택 항목을 실행하는 문제는 해결되지 않았습니다. – user12059

답변

0

알아 냈어. 루프 이전의 루프 내에서 페이지 상단으로 가야하거나 찾기 중 텍스트 검색을 감싸야했습니다. 업데이트 된 스크립트는 다음과 같습니다.

Sub RemoveAppendices() 
Dim i As Integer 
For i = 3 To 1 Step -1 
    'Selection.HomeKey Unit:=wdStory 'this would also work but I like wrap better 
    With Selection.Find 
     .Wrap = wdFindContinue 
     .Text = "APPENDIX" & i 
     .MatchWholeWord = True 
     .MatchCase = True 
     If Selection.Find.Execute Then 
      Selection.Select 
      Selection.Delete 
      With Selection 
       .EndKey Unit:=wdStory 
       .TypeBackspace 
       .Delete 
      End With 
     End If 
    End With 
Next i 
End Sub