2017-04-07 1 views
-1

VBA 명령을 사용하여 특정 구를 찾은 다음 그 앞에서 1 또는 2 단어를 선택하는 데 문제가 있습니다. 전체를 이탤릭체로 표시한다.VBA 단어 : 구문을 찾아서 그 전에 단어를 선택하고 텍스트를 기울이고 싶습니다.

Selection.Find, Font.Italicise 및 wdExtend 명령을 서로 독립적으로 사용할 수 있지만 이러한 작업을 수행하기 위해 결합하면 매크로가 충돌합니다. 어떤 도움이 필요합니까?

Selection.Find.ClearFormatting 
With Selection.Find 
    .Text = "Michael" 
    .Replacement.Text = "Michael" 
    .Forward = True 
    .Wrap = wdFindStop 
    Do While .Execute() = True 
     Selection.TypeParagraph 
     Selection.MoveLeft Unit:=wdWord, Count:=2, Extend:=wdExtend 
     Selection.Find.Replacement.Font.Italic = True 
     Selection.Font.Bold = True 
     Selection.Collapse Direction:=wdCollapseEnd 
    Loop 
End With 
+0

정확히 어떻게 도와 줄지 결정하기 위해 시도한 코드를 제공해주십시오. [좋은 질문을하는 방법] – PeterT

+0

감사합니다. – Kevin

답변

0

다음 코드는 원하는대로 처리합니다. 그러나, 나는 그것을 당신이 그것을 이해하는 것이 가능하게 할 것이라고 생각하는 방식으로 그것을 썼다.

Private Sub SelFind() 
    ' 08 Apr 2017 

    Dim Rng As Range 
    Dim Fnd As Boolean 

    Set Rng = Selection.Range 
    With Rng.Find 
     .ClearFormatting 
     .Execute FindText:="Michael", Forward:=True, _ 
       Format:=False, Wrap:=wdFindStop 
     Fnd = .Found 
    End With 

    If Fnd = True Then 
     With Rng 
      .MoveStart wdWord, -2 
      With .Font 
       .Italic = True 
       .Bold = True 
      End With 
     End With 
    End If 
End Sub 

한 줄에 묶인 문서의 모든 문자를 상상으로 시작은, 또한 문자처럼 취급되는 형식 코드 산재. 이 긴 문자열을 코드라는 ActiveDocument.Range의 범위라고합니다.

문서의 전체 범위 중 일부를 선택할 수 있습니다. 모든 범위와 마찬가지로 Start (첫 번째 바이트)와 End (마지막 바이트. StartEndRange의 첫 번째 바이트부터 세어 숫자로 표시되는 속성입니다.) 내 코드는 새 바이트를 계산하여 Selection.Range이됩니다. RNG라고 Range 개체가. Selection.Range 그 새로운 객체에 할당됩니다. RngSelection.Range이 시점에서 동일하지만, 당신이 Rng 객체를 조작 한, Selection.Range이 변경되지 않습니다.

코드는 이제 찾습니다 "Michael"이 Rng 개체에 있습니다. 검색 설정 구문이 완벽합니다. 이해하기 쉽기 때문에 다른 구문을 사용했습니다. .Found 속성은 검색이 su이면 True를 반환합니다. Ccessful. 이 경우 탐색 범위는 발견 된 하위 범위 만 포함하도록 변경됩니다. Selection.Range에서 검색을 수행했다면 화면에 "Michael"이 강조 표시됩니다. 그러나 검색은 메모리 (Rng 개체)에서 수행되었으므로 Selection.Range은 변경되지 않고 Rng 개체에는 이제 "Michael"이라는 단어 만 포함됩니다.

따라서 ActiveDocument.Range (이 중 Rng) 부분으로 돌아가서 Start 속성을 왼쪽으로 두 단어 이동합니다. 양수는 오른쪽으로 2 워드 이동합니다. Extend은 명령이 완벽하게 명확하기 때문에 필요하지 않습니다. "이동 시작"은 끝이 그대로있는 것을 의미합니다.

이제 Rng 개체는 "Michael"앞에 2 단어를 시작하고 "Michael"단어로 끝납니다. 이 범위를 복사하거나 삭제하거나 원하는대로 수정할 수 있습니다. 화면에 여전히 원래 Selection.Range이 표시됩니다. MS Word에서는 Set Selection.Range = Rng을 할당 할 수 없지만 코드가 수행 한 작업으로 디스플레이를 재정렬하는 더 쉬운 방법이 있습니다. 글꼴을 수정 한 후 (End With 바깥 쪽) 라인 .Select을 추가하면 수정 된 Rng이 선택 항목이됩니다.

+0

고마워요, 이건 매우 도움이되고 교육적인 것입니다. – Kevin

관련 문제