下面的代碼將做你想做的。但是,我以我認爲能夠最好地理解它的方式編寫它。
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
。
您可以選擇文檔整個範圍的任何部分。這將是Selection.Range
,它與所有範圍一樣,有一個開始(第一個字節)和一個結束(最後一個字節。Start
和End
是由數字表示的Range
的屬性,從第一個字節開始計數。我的代碼創建一個新的這被稱爲RNG Range對象。該Selection.Range被分配給新的對象。Rng
和Selection.Range
在這一點上是相同的,但是當你操縱Rng
對象時,Selection.Range
不會改變。
現在,該代碼查找「Michael」在Rng
對象中,你設置搜索的語法是完美的,我使用了不同的語法,因爲我發現它更易於理解,如果搜索結果爲su,.Found
屬性返回True ccessful。在這種情況下,搜索範圍將更改爲僅包含找到的子範圍。如果搜索是在Selection.Range
中進行的,您會在屏幕上看到「Michael」突出顯示。但由於搜索是在內存中進行的(在Rng
對象上),Selection.Range
保持不變,而Rng
對象現在只包含單詞「Michael」。
因此,回到ActiveDocument.Range
,其中Rng
是一個部分,我們現在將Start
屬性兩個單詞移動到左側。一個正數會將它向右移動兩個單詞。不需要Extend
,因爲該命令非常清晰:「移動開始」,意味着End仍然保留在原來的位置。
現在Rng對象在「Michael」之前開始2個字,以「Michael」結尾。您可以複製該範圍或將其刪除,或根據需要進行修改。請記住,您的屏幕仍顯示原始Selection.Range
。 MS Word將不允許您分配Set Selection.Range = Rng
,但有一種更簡單的方法可以將顯示與代碼所做的操作重新對齊。在修改字體後(在外部End With
之前)添加行.Select
,修改的Rng
將成爲選擇。
請提供您嘗試過的代碼,以便我們確定如何爲您提供幫助。 [我如何問一個好問題?](http://stackoverflow.com/help/how-to-ask) – PeterT
謝謝,補充 – Kevin