我是一名教师,正在创建一个宏来查找学生论文中的常见错误。例如,我构建了一个宏来查找单词“profit”。如果找到,它会查找前一个单词。如果前一个单词不是“operating”或“gross”或“net”,那么我会向学生返回一条评论。
我有几个这样的项目。但是,当我通读文档并查看所需单词之前或之后的单词时,数字会弄乱我。例如,我想看看学生在使用“between”时是否使用“and”(他们经常错误地使用 between/to 或 between/through)。因此,我有一个宏来查找单词“between”,然后查看接下来的两个单词,看看它们是否是“and”。如果不是,它会返回一条注释。
我的问题是,如果有类似这样的情况:介于 5200 万美元和 6400 万美元之间... 那么向前查找 2 个单词将找不到“and”,因为 52 美元没有被读成一个单词。我应该使用单词以外的其他东西来做到这一点吗?或者有没有办法将数字读成单词(或文本)?
这是我的代码:
Dim doc As Document
Set doc = ActiveDocument
Dim k As Integer
Dim j As Integer
For k = 1 To doc.Words.Count - 3
j = 0
If Trim(doc.Words(k)) = "between" Then
j = 1
End If
If Trim(doc.Words(k + 2)) = "and" Or Trim(doc.Words(k + 3)) = "and" Then
j = 0
End If
If j = 1 Then
ActiveDocument.Comments.Add range:=Selection.Document.Words(k), Text:="the word 'between' should be followed by 'and' such as: between $4 million and $6 million'."
End If
Next
答案1
如果 VBA 中的定义word
不适合您的目的,您将需要自己动手。
您可以阅读并处理整个文档文本。您可以通过简单地删除它们来摆脱麻烦的字符。然后您将使用 分割功能 拆分文档。
由于问题在于 Split 函数只允许使用一个字符作为分隔符,因此您需要用空格替换所有标点符号和特殊字符。
另一个问题是 Split 函数将一行中的两个分隔符或字符串开头或结尾处的分隔符视为围绕空字符串 ("")。因此需要用一个空格替换所有重复的空格。
或者,您可以使用正则表达式来隔离单词。例如,请参阅 Stack Overflow 帖子 在 VBA 中返回正则表达式匹配(excel)。