Запуск макросов на основе ключевых слов (Microsoft Word)
Эяль интересуется, есть ли способ автоматически запускать макрос, если пользователь вводит определенное слово или фразу.
К сожалению, нет процедур обработки событий 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 [Запуск макросов на основе ключевых слов]
.