2013-05-21 30 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