Eyal想知道如果用户输入特定的单词或短语,是否有任何方法可以自动运行宏。

不幸的是,没有Word VBA事件过程可以检测何时在文档中键入文本。但是,Word会在内部检测何时输入完整的单词,以便它可以执行拼写检查,自动更正和更新单词计数之类的操作。但是,您无法使用此内部检测方法。

最好的方法可能是使用VBA的计时器功能来检查是否输入了单词。 (请记住,Word在每次完成一个单词时都会在内部更新单词计数,因此您的计时器代码可以监视单词计数以查看其是否已更改。)OnTime方法的最小设置为一秒,这意味着您的计时器-基于代码的代码每秒只能运行一次。快速打字员每秒可能输入多个单词,因此您的代码需要实际检查输入的最后几个单词。

这是您可以使用的代码:

Dim wCount As Long Dim aRange As Range Dim tWords Dim inactiveSW As Boolean

Sub InitializeTimer()

tWords = Array("APPLE", "ORANGE", "PEAR")

wCount = ActiveDocument.Words.Count     Set aRange = Selection.Range     aRange.Start = ActiveDocument.Range.Start     inactiveSW = False     StartTimer End Sub
Public Sub StartTimer()

Application.OnTime When:=Now + TimeValue("00:00:01"), _     Name:="TestWords"

End Sub
Public Sub TestWords()

Dim testWord As String     Dim i As Long     Dim k As Long     Dim kw As Long     Dim xc As Long

If inactiveSW Then Exit Sub     With ActiveDocument         xc = .Range.Words.Count - wCount         If xc > 0 And xc < 5 Then             aRange.End = Selection.End             kw = aRange.Words.Count - 1             If kw > 0 Then                 For k = kw - xc + 1 To kw                     testWord = UCase(Trim(aRange.Words(k).Text))

For i = 0 To UBound(tWords)

If testWord = tWords(i) Then                             mysub (testWord)

Exit For                         End If                     Next i                 Next k             End If         End If         wCount = .Range.Words.Count     End With     StartTimer End Sub
Public Sub KillOnTime()

'cannot stop the timer so set inactive switch   inactiveSW = True End Sub
Sub mysub(s As String)

' this subroutine is executed when a special word is entered   MsgBox s End Sub

您需要运行的第一个例程是InitializeTimer宏。它设置了在实际启动OnTime方法之前必需的变量。然后,它调用StartTimer宏,该宏实际上设置了运行TestWords宏的计时器。

TestWords会检查单词数是否增加,如果已经增加,它会检查最后输入的五个单词以查看它们是否与您的任何触发词匹配。 (将触发字设置在tWords数组的InitializeTimer宏中。应将它们全部以大写形式输入到数组中。)如果检测到触发字,则将执行代码(mysub),并传递触发字您的代码。

应该注意的是,字数可能会跳动超过5个,特别是在文本粘贴到文档中的情况下。如果您希望代码检查所有可能粘贴到文档中的单词,则需要更改检查代码行,即:

If xc > 0 And xc < 5 Then

您需要做的就是将其更改为:

If xc > 0 Then

如果要停止单词检查,请运行KillOnTime宏,该宏设置一个标志来阻止单词的检查。要稍后重新启动检查,只需再次运行InitializeTimer。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(12375)适用于Microsoft Word 2007、2010、2013、2016、2019和Office 365中的Word。 Word的旧菜单界面在这里: