2017-02-10 2 views
0

배치되는 경우보다는 발견 텍스트를 선택하는 방법에 대해 설명합니다.워드 VBA : 커서가이 아마 간단하지만 나는 그것이 동작하지 않습니다

나는, 내 문서를 검색 문자열 '하여 alog'를 포함하고 'UE'을 추가 할 단어를 찾을 필요가있다. 예 : 'catalogs'-> 'catalogs'.

위가 잘 작동하지만 다음 비트는 동작하지 않습니다 : 발견 된 문자열이 이미있는 경우 '를 UE'는 내가 다른 'UE'를 추가하고 싶지 않아 '로그'후.

매크로로부터 액세스 서브 루틴은 아래와 같다. 나는 '실행하면서'부분에 다음 줄을 추가하려했지만, '선택은'항상 커서가 될 일이 단어 것으로 밝혀졌습니다.

With Selection 

    .Expand unit:=wdWord 

End With 

어떻게 내가) 발견 된 범위의 내용을 선택하고 두 문자가 'UE'경우 II)를 참조하기 위해 두 개의 문자로 그 새로운 선택을 확장합니까?

감사합니다. 나는 당신의 질문의 첫 번째 부분을 따라 아주 확실하지 않다

Sub do_replace2(old_text As String, new_text As String, Count_changes As Integer) 

    ' Replaces 'log' with 'logue' 
    ' Ignores paragraphs in styles beginning with 'Question' 

    Dim rg As Range 
    Set rg = ActiveDocument.Range 

    With rg.Find 
    .Text = old_text 
    While .Execute 
     If Left(rg.Paragraphs(1).Style, 8) <> "Question" Then 
      rg.Text = new_text 
       With ActiveDocument.Comments.Add(rg, "Changed from '" & old_text & "'") 
       .Initial = "-logs" 
       .Author = "-logs" 
       End With 
       Count_changes = Count_changes + 1 
      End If 
    rg.Collapse wdCollapseEnd 
    Wend 
    End With 
    End Sub 

답변

0

는 "어떻게 발견 범위의 내용을 선택합니까". rg 변수에 이미 검색 결과가 포함되어 있습니다. 당신이 그것을 선택합니다, 그냥 rg.Select를 사용합니다. 이것은 디버깅에 유용 할 수 있습니다 (따라서 코드를 단계별로 실행할 때 Range이 어디에 있는지 알 수 있습니다). Selection 개체를 질문에 사용하십시오. 대신 Range 개체를 사용할 수 있습니다.

"2 ... 문자로 새 선택을 확장하는 방법"질문 2의 경우 Range.End 속성에 2를 추가하면됩니다.

With rg.Find 
    .Text = old_text 
    While .Execute 
     If Left(rg.Paragraphs(1).Style, 8) <> "Question" Then 
      Dim test As Range 
      Set test = rg.Duplicate   'copy the found Range. 
      test.Collapse wdCollapseEnd  'move to the end of it. 
      test.End = test.End + 2   'expand to the next 2 characters. 
      If test.Text <> "ue" Then  'see if it's "ue". 
       rg.Text = new_text 
       With ActiveDocument.Comments.Add(rg, "Changed from '" & old_text & "'") 
        .Initial = "-logs" 
        .Author = "-logs" 
       End With 
       Count_changes = Count_changes + 1 
      End If 
     End If 
     rg.Collapse wdCollapseEnd 
    Wend 
End With 
+0

많은 감사 코민테른 : 당신은 단지 테스트를 위해 이것을 사용하고 있기 때문에합니다 (.Find 방법은 사기가 될 수 있기 때문에)하는 사본 rg에서이 작업을 테스트합니다. 저건 완벽 해. – hmm

+0

감사합니다. comintern; 나가 말한대로 + 2는 잘 작동한다, 저에게 끈을 가진 범위 시작 (말하기) 735 그리고 끝 737를 준다. 그러나 .wdcollapsestart 및 .start + 5를 수행하면 범위 시작과 끝은 같고 문자열은 null입니다. 왜 '시작'은 '끝'과 같은 방식으로 작동하지 않습니까? – hmm

+0

또 다른 업데이트 : 내가 이렇게 할 때 : test.Collapse wdCollapseStart test.Start = test.Start - 5 잘 작동합니다. '시작 + n'할 수 없습니까? – hmm