1

我正在尝试遍历 Word 文档中的所有句子并将它们解析为半 HTML 代码。在测试过程中,我遇到了一个有趣的情况,即会跳过后面跟着非封闭句的任何句子。例如,如果我有以下两句话:

这是带有特殊字符的段落中的第一个句子,应该还有一个句子。这是应该在那里的第二句话。**

当我遍历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
4

2 回答 2

1

第一个星号似乎有问题。将第一个星号更改为其他任何内容,此代码将按您希望的方式运行。我不知道这是否是一种特殊行为,但是如果您引用ActiveDocument.Paragraphs(1).Range.Sentences(2).text该句子的全文是您所期望的。

使用 while...wend 和增量计数器对循环进行简单的改造,您可以使用它们的索引来引用这些项目。

于 2013-05-21T21:47:54.223 回答
0

我不知道如何以“words.special_character”的格式“读取”句子中的所有字符,但我意识到如果我替换 Word 文档中的所有句点+special_character 实例,我所有的 For Each 循环都可以工作. 我在子模块的最开始使用了以下代码,一切都按预期工作:

'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
于 2013-06-05T11:32:12.063 回答