다음 코드는 원하는대로 처리합니다. 그러나, 나는 그것을 당신이 그것을 이해하는 것이 가능하게 할 것이라고 생각하는 방식으로 그것을 썼다.
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 (마지막 바이트. Start
및 End
은 Range
의 첫 번째 바이트부터 세어 숫자로 표시되는 속성입니다.) 내 코드는 새 바이트를 계산하여 Selection.Range
이됩니다. RNG라고 Range 개체가. Selection.Range 그 새로운 객체에 할당됩니다. Rng
및 Selection.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
이 선택 항목이됩니다.
정확히 어떻게 도와 줄지 결정하기 위해 시도한 코드를 제공해주십시오. [좋은 질문을하는 방법] – PeterT
감사합니다. – Kevin