2010-06-22 68 views
4

我想在MS Word文檔中對每個粗體句子加上第一個字母。什麼是實現這個目標的好方法?在MS Word文檔中的每個句子上加粗寫第一個字母

+0

記住那句話分割是不是一個容易解決的問題。它需要考慮縮寫以及使用某種非常規的交互操作,例如正如在tehblanx答案:「請注意,上面的表達式將使每個句子的第一個字符和前面的?/!/。粗體。」你會在哪裏自動檢測邊界? 「大膽」這個詞是否開始一個新的句子? – 2010-06-26 11:40:50

回答

3

這可以用Word內置的高級查找+替換來完成。您需要指定通配符匹配的表達式,比如這一個選擇的第一個字符下一個句點和空間:

[\.\?\!] ? 

您可以指定找到的每個字符在相同的用戶界面風格(這是不嚴格找/替換 - 你可以找到/風格)。請注意,上面的表達式將成爲每個句子的第一個字符和前面的?/!/。膽大。您可以通過再次搜索標點符號並取消加粗來糾正此問題。

請參見本指南:http://www.gmayor.com/replace_using_wildcards.htm

不是很程序化的,我知道,但比鑽研VBA快得多。

6

在VBA

Sub BoldFirstLetterInSentence() 
Dim ad As Document 
Set ad = ActiveDocument 
Dim sen As Range 
For Each sen In ad.Sentences 
    sen.Words.First.Characters.First.Font.Bold = True 
    /* sen.Words(1).Characters(1).Font.Bold = True also works */ 
Next 
End Sub 
+0

你介意告訴我,爲什麼這個代碼不起作用,當我有'選擇顯式'打開? – froeschli 2010-09-20 20:07:03

+0

這是因爲For Each循環中的sen不定義,Option Explicit需要定義所有變量。它是一個'Range'對象,所以你只需要在'Set ad ...'下面添加'Dim sen As Range'。我更新了代碼以反映這一點。 – 2010-09-20 20:34:37

1

下工作得直截了當,我

Option Explicit 

Public Sub SetFirstLetterBold() 
    Dim i As Integer 
    Dim doc As Document 
    Set doc = ActiveDocument 

    For i = 1 To doc.Sentences.Count 
     doc.Sentences(i).Characters(1).Bold = True 
    Next 
End Sub 
相關問題