2017-12-17 20 views
1

While ... Wend 루프가이 매크로에서 작동하지 않는 이유를 이해하기가 어렵습니다. 틀림없이, 웬드는 내 강한 옷이 아니야. 하지만 어쨌든, 내가 성취하려고하는 것은 다음과 같습니다.Word VBA Wend 문이 작동하지 않는 동안

문서의 끝에는 단어 나 구가 하나씩 나열되어 있습니다 (각각 별도의 행에 있음). 문서에서 해당 단어를 각각 검색하고 노란색 강조를 적용하는 매크로를 원합니다. 그래서 여기에 내가 만들고자하는 과정이 있습니다 :

  1. 매크로를 호출 할 때 나는 첫 단어에 있습니다.
  2. 첫 번째 문자를 평가하십시오. 빈 줄이면 아무것도하지 않고 매크로를 종료하십시오. 단어 나 구가 있으면 그것을 선택하고 FRText로 저장하십시오.
  3. 줄을 삭제하고 책갈피를 만들고 F/R을 사용하여 텍스트를 찾아 강조 표시하십시오.
  4. 린스하고 더 이상 단어가 없을 때까지 반복하십시오.

임시 매크로에서 매크로를 단일 단계 단위로 세분화했으며 While ... Wend 문을 사용하여 더 간단한 "중간 단계"단계에서 작업 할 수있었습니다 (예 : F/R 작업 대신에 빈 줄 대 빈 줄을 테스트하고, 단어 인 경우 텍스트를 굵게 표시하고 비어 있으면 종료합니다.) 모두 잘 작동합니다.

그러나 모든 것을 "실제 매크로"에 넣을 때마다 매번 동일한 문제가 발생합니다. 제대로 컴파일되지만 컴파일 할 때 디버그 오류가 발생합니다. 디버그를 클릭하면 3 ~ 4 개의 단어 (정확하게)로 매크로가 실행되고 디버거는 매크로의 다른 임의의 지점에서 멈추거나 아무런 운이나 이유도없이 무엇이 잘못되었는지에 대한 힌트없이 멈 춥니 다.

또한 목록의 마지막 단어에 매크로를 수행하면 제대로 작동합니다. 그리고 문서의 빈 줄에 커서를 올려 놓으면 제대로 작동합니다 (아무 일도하지 말고 그대로).

내가 곤혹 스럽다. While ... Wend 루프에 대한 예제 및 정보를 검색하여 설명을 찾을 수 있는지 확인했습니다. 나는 또한 나의 책을 수색했다. 그러나 내가 시도한 것은 아무것도 작동하지 않는 것 같습니다. 나는 누군가가 이것을보고 즉시 내가 뭘 잘못하고 있는지를 볼 수있는 기적을기도하고 있습니다!

매크로는 아래에 있으며 테스트를 원하는 사람이 있으면 복사 할 샘플 텍스트도 있습니다. 미리 감사드립니다!

MACRO 테스트를 위해

카렌


Sub FindAndHighlightList() 

     Dim FRText As String 
     Dim iCount As Integer 

    Application.ScreenUpdating = False 


    'Begin with cursor on first word in "find list." 
    'Repeat the following action until no more words are found in the list 
    'iCount is precautionary measure in case macro gets hung in the loop 

    While Not Selection.Characters(1) = Chr(13) And iCount < 1000 
       iCount = iCount + 1 

    'Select the current line of text, minus the paragraph mark; store it as FRText; then delete it 

     Selection.HomeKey Unit:=wdLine 
     Selection.EndKey Unit:=wdLine, Extend:=wdExtend 
     Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend 

     FRText = Selection.Text 

     Selection.EndKey Unit:=wdLine, Extend:=wdExtend 
     Selection.Delete Unit:=wdCharacter, Count:=1 

    'Create a temporary bookmark 

     With ActiveDocument.Bookmarks 
      .Add Range:=Selection.Range, Name:="TempX" 
      .DefaultSorting = wdSortByName 
      .ShowHidden = True 
     End With 

    'Find the selected text and replace add yellow highlight 

     Selection.Find.ClearFormatting 
     Selection.Find.Replacement.ClearFormatting 
     Options.DefaultHighlightColorIndex = wdYellow 
     Selection.Find.Replacement.Highlight = True 
     With Selection.Find 
      .Text = FRText 
      .Replacement.Text = FRText 
      .Forward = True 
      .Wrap = wdFindContinue 
      .Format = True 
      .MatchCase = True 
      .MatchWholeWord = False 
      .MatchWildcards = False 
      .MatchSoundsLike = False 
      .MatchAllWordForms = False 
     End With 
     Selection.Find.Execute Replace:=wdReplaceAll 

    'Go to TempX bookmark location 

     Selection.GoTo What:=wdGoToBookmark, Name:="TempX" 

    Wend 

    If Selection.Characters(1) = Chr(13) Then Exit Sub 

     Application.ScreenUpdating = True 

    End Sub 

샘플 텍스트는 여기에 내가 강조하고 싶은 몇 가지 단어와 문단의 예입니다. 그리고 여기에 더 많은 단어들이 있습니다. 그리고 나는이 매크로를 작동 시키면 좋겠다. 나는 그것을 고치려고 내 마음과 종교를 잃어 가고있다! 다음은 강조하고자하는 단어가 들어있는 단락의 예입니다.

그리고 여기에 몇 가지 단어가 있습니다. 그리고 나는이 매크로를 작동 시키면 좋겠다. 나는 그것을 고치려고 내 마음과 종교를 잃어 가고있다! 다음은 강조하고자하는 단어가 들어있는 단락의 예입니다. 그리고 여기에 더 많은 단어들이 있습니다. 그리고 나는이 매크로를 작동 시키면 좋겠다. 나는 그것을 고치려고 내 마음과 종교를 잃어 가고있다!여기


예를
단락
단어
매크로

ThunderFrame는 다음과 같은 응답 내 질문에 응답
+1

"Find"를 사용하여 현재 선택 전체가 찾고자하는 정확한 텍스트 일 ​​때, 문서에서 더 이른 경우라도 다음 항목을 미리 보게됩니다. - https://stackoverflow.com/a/44105332/5757159 – ThunderFrame

+0

안녕하세요 ThunderFrame - 답변 해 주셔서 감사합니다. 나는 네가하는 말을 잘 이해하지 못한다. 예를 들어 필자가 수동으로 텍스트를 선택한 다음 찾기/바꾸기 또는 찾기를 호출하면 해당 텍스트 내에서만 검색하고 문서의 시작 부분이 아니라 아래쪽을 검색합니다. GRRR - 계속 타격하십시오! 어쨌든, 그 이유는 매크로의 시작 부분을 내가했던 것처럼 설정했기 때문입니다. 텍스트 행을 선택하고 변수로 저장 한 다음 삭제는 효과적으로 선택 해제합니다. 그런 다음 F/R을 방해하지 않습니다. 차이가 있습니까? – HappyNanaMO

+0

ThunderFrame, 문제가 될 수 있다고 생각하는 경우 문서 상단으로 이동하여 검색을 시작하는 성명을 추가하는 것이 좋습니다. 나는 그것을 시도 할 것이다. – HappyNanaMO

답변

1

: 찾기를 사용하여 해당 인식 될 수처럼

그것은 소리, 전체 현재 선택은 찾고있는 텍스트와 정확히 일치하며 문서의 앞부분에 있더라도 다음 어커런스를 앞당겨 볼 것입니다.

그리고 효과가있었습니다!

나는 그의 의견을 upvoting하고 해결 된 것으로 표시하는 옵션을 보지 못했기 때문에 그의 대답을 게시하고 있습니다. 이렇게하면 희망을 갖고이 일을 할 수있는 선택권이 생깁니다.

고맙습니다. ThunderFrame!