检查单词中的大写字母是否一致?

时间:2018-06-13 18:47:43

标签: vba ms-word word-vba

我正在尝试提出某种宏来帮助我验证我在文档中始终大写单词。我已经使用这个宏来突出显示大写的单词,但它并没有帮助我验证该单词的所有实例都是大写的:

Sub Capitals()

Dim oRng As range
Set oRng = ActiveDocument.range
With oRng.Find
    Do While .Execute(FindText:="([A-Z])", MatchWildcards:=True)
        oRng.HighlightColorIndex = wdYellow
        oRng.Collapse 0
    Loop
End With

Dim oRng1 As range
Set oRng1 = ActiveDocument.range
With oRng1.Find
    Do While .Execute(FindText:="([.\!?]) [A-Z]*>", MatchWildcards:=True)
        oRng1.HighlightColorIndex = wdNoHighlight
        oRng1.Collapse 0
    Loop
End With

我甚至不确定如何开始接近这个。有没有人有想法?

1 个答案:

答案 0 :(得分:0)

对此的解决方案看起来并不快。但是,我认为我会基本上采取三个步骤来解决问题:

  1. 使用正则表达式来提取所有不是a的开头的单词 句子,并建立这些词的字典对象(与 单词作为键,...任何作为值,稍后更多内容)。 它可能涉及子步骤:
    • 制作文件的副本
    • 因为VBA正则表达式没有实现lookbehind,所以用一个句子中的所有第一个单词替换正则表达式(正则表达式字符串将是这样的:"(([?!。])| ^)\ w +'?\ w *"),并替换为空字符
    • 然后使用正则表达式(例如&#34;&#39;?\ b [\ w&#39;] + \ b&#39;?&#34;)匹配所有单词并将它们放入字典< / LI>
  2. 从集合中创建排序列表。通过将您的集合粘贴到excel中的范围内,这可能是最简单的。这有 然后能够通过公式而不是通过公式做其余的优势 更多VBA /代码。我不知道任何内置的排序方式 字典对象按字母顺序按VBA中的键...所以你必须这样做 代码一或找到一个。
  3. 最后,既然您已经有了排序列表,那么请仔细检查并比较彼此相邻的条目。如果他们是一样的 不区分大小写的比较,但不同的是区分大小写 比较,然后将其添加到最终输出。
  4. 关于字典对象:乍一看,集合对象似乎更好。但是,我认为VBA中的集合对象不区分大小写,无法使其区分大小写。默认情况下,VBA中的字典区分大小写(如果需要,可以使用允许您将其设置为不区分大小写的属性)。

    最后,我不喜欢我的解决方案。但这是我在VBA中想到的唯一方法。另一种选择,不是在VBA中,将使用Python之类的ms office软件包。这将允许您在正则表达式中使用负向lookbehind,并且还允许更轻松地对列表进行排序。