2013-05-21 60 views
0

我想循環顯示Word文檔中的所有句子,並將它們解析爲半HTML代碼。在測試過程中,我遇到了一個有趣的情況,任何一個句子後跟一個非關閉的句子都會被跳過。例如,如果我有以下兩個句子:用於MS Word的VBA不會循環顯示段落中的所有句子

這是帶有特殊字符的段落中的第一個句子和 應該有一個句子。這是第二個句子 應該有。**

當我穿過paragraph.range.sentences每句循環,我只得到了第一句和「**」,在結束這段落。但是,如果我在期間和astriks之間添加空格,那麼代碼將工作爲「。**」。

如何確保宏讀取句子中的所有文本,即使時間段之後沒有空格?我的示例代碼如下:

Public Sub ParseDoc() 
Dim paras As Paragraphs 
Dim para As Paragraph 
Dim sents As Sentences 
Dim sent As Range 


    Set paras = ActiveDocument.Paragraphs 
    For Each para In paras 
     Set sents = para.Range.Sentences 
     For Each sent In sents 
      MsgBox (sent.Text) 
     Next 
    Next 
End Sub 

回答

0

我無法弄清楚如何以「words.special_character」的格式「讀取」句子中的所有字符,但我意識到如果我替換了Word文檔中的所有period + special_character實例,爲每個循環工作。我使用下面的代碼在我的子模塊的一開始,一切工作如期:

'Adds a <SPACE> between a period and a non-alphanumeric character 
With ActiveDocument.Range.Find 
    .Text = ".([!0-9A-z ])" 
    .Replacement.Text = ". \1" 
    .MatchWildcards = True 
    .Execute Replace:=wdReplaceAll 
End With 
0

這似乎是第一個星號的問題。首先將星號改爲其他任何內容,然後按照您的希望運行此代碼。我不知道這是否是一種特殊行爲,但如果你引用ActiveDocument.Paragraphs(1).Range.Sentences(2).text這句話的全文正如你所期待的那樣。

使用while ... wend和增量計數器可簡單重構循環,您可以使用它們的索引來引用項目。

+0

感謝您的答案。我注意到與「#」字符類似的東西,但大多數文本字符都可以。這有點奇怪爲什麼會發生這種情況。讓我重寫一下我的循環,看看我能否得到它的工作。 – Michael

+0

我確實很快看到有關轉義序列的任何註釋,但有很多不相關的搜索結果。 – horatio