Эяль интересуется, есть ли способ автоматически запускать макрос, если пользователь вводит определенное слово или фразу.

К сожалению, нет процедур обработки событий 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) выполняется, и триггерное слово передается к вашему коду.

Следует отметить, что количество слов может увеличиться более чем на пять, особенно если текст вставлен в документ. Если вы хотите, чтобы код проверял все слова, которые могут быть вставлены в документ, вам необходимо изменить строку кода проверки, которая выглядит так:

If xc > 0 And xc < 5 Then

Все, что вам нужно сделать, это изменить его на это:

If xc > 0 Then

Если вы хотите остановить проверку слов, запустите макрос KillOnTime, который устанавливает флаг, запрещающий проверку слов. Чтобы позже перезапустить проверку, просто снова запустите InitializeTimer.

_Примечание: _

Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (12375) применим к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Office 365. Вы можете найти версию этого совета для старый интерфейс меню Word здесь:

link: / word-Running_Macros_Based_on_Keywords [Запуск макросов на основе ключевых слов].