我试图遍历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
答案 0 :(得分:1)
第一个星号似乎有问题。将第一个星号更改为其他任何内容,此代码按照您的希望运行。我不知道这是否是一种特殊行为,但是如果你引用ActiveDocument.Paragraphs(1).Range.Sentences(2).text
,那么句子的全文就像你期望的那样。
使用while ... wend和incremental计数器对循环进行简单的重新处理,您可以使用它们的索引来引用项目。
答案 1 :(得分:0)
我无法弄清楚如何以“words.special_character”的格式“读取”句子中的所有字符,但我意识到如果我替换了Word文档中的所有句点+ 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