如果句号和尾注之间没有空格,则Sub无法找到长句子

时间:2018-11-30 16:30:13

标签: vba ms-word word sentence citations

我有一个简单的循环(如下),查找的单词长度超过30个字。如果找到,它将在所选句子中添加一个注释框。在测试中效果很好。然后我添加了一些测试尾注引文...但是找不到长句子。

但是,仅当句号和上标之间没有空格时,才会失败。如果我添加一个空格,它将找到它并且可以正常工作。问题是,按照我在工作中必须遵循的风格指南,在句号和引文之间应该没有空格。

This related Stack thread讨论了在句点之后划定空格的必要性。我假设该空格必须在句点之后,因为我的引文中有这样的空格:1、2、3

问题

如何找到句点+上标的实例(没有这样的空格->这是一个句子。1、2、3)并添加空格?理想情况下,我希望在以下循环中进行此操作,以便在添加注释后删除空格。

Sub Comment_on_Long_Sentences ()

Dim iWords as Integer

iWords = 0

For Each MySent in ActiveDocument.Sentences

If MySent.Words.Count > iWords Then

    MySent.Select

    'find and delete space

    ActiveDocument.Comments.Add Range:= Selection.Range, Text:= "Long Sentence: " & iWords & " words"

    'put the space back

End if

Next MySent

End Sub

3 个答案:

答案 0 :(得分:1)

当尝试访问以上标字符结尾的句子时,VBA中似乎存在问题。您的代码还存在未声明变量的问题,因此我不知道它最初如何为您工作。

尝试以下VBA例程,它在我的环境中有效。还要注意,我发现段落中第一个句子以及该句子以上标字符结尾时需要特殊处理。

np.matmul(conv[:, :, np.newaxis, ...], attention[:, np.newaxis, ...]).shape

答案 1 :(得分:0)

这里是替代解决方案。请注意在开始时显式的选项。 VBA的良好做法是将其放在每个模块的顶部。

您遇到的问题很常见。然后找到一些东西,而不是进行替换,而是进行其他一些与替换无关的工作。在引用实现这种模式之前添加和删除空格的子程序非常值得研究。

如果您什么都不懂,请在VBA IDE中将光标放在相关的关键字上,然后按F1。这将打开相关的MS帮助页面。

TS2339: Property 'originalExistingMethod' does not exist on type 'SomeClass'

答案 2 :(得分:0)

无论采用哪种方法,任何依赖VBA .Sentence属性或.Word属性的代码都将产生不可靠的结果。这是因为.Sentence不知道什么是语法句子,而.Word不知道什么是语法单词。例如,考虑以下内容:

先生。史密斯(Smith)在约翰杂货店(Dr. John's Grocery Store)花费1,234.56美元,购买10.25公斤土豆,10公斤鳄梨和15.1公斤格林夫人山。令人愉快的澳洲坚果。

对您和我来说,这将是一个由26个单词组成的句子;对于VBA,它计为5个句子,总共包含45个单词。为了获得准确的字数,请使用.ComputeStatistics(wdStatisticWords)。遗憾的是,句子中没有等效的.ComputeStatistics(wdStatisticSentences)。