Eyal se pregunta si hay alguna forma de ejecutar una macro automáticamente si un usuario escribe una palabra o frase en particular.

Desafortunadamente, no existen procedimientos de eventos de Word VBA que detecten cuando se escribe texto en un documento. Sin embargo, Word detecta internamente cuando se ingresa una palabra completa para que pueda realizar cosas como la revisión ortográfica, la autocorrección y la actualización del recuento de palabras. Sin embargo, no puede aprovechar este método de detección interno.

Probablemente el mejor enfoque es usar la capacidad del temporizador de VBA para verificar si se ha ingresado una palabra. (Recuerde: Word actualiza internamente el recuento de palabras cada vez que se completa una palabra, por lo que el código del temporizador puede monitorear el recuento de palabras para ver si ha cambiado). el código basado solo puede ejecutarse una vez por segundo. Es posible que un mecanógrafo rápido escriba más de una palabra por segundo, por lo que su código debe verificar realmente las últimas palabras ingresadas.

Aquí está el código que puede usar:

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

La primera rutina que debe ejecutar es la macro InitializeTimer. Configura las variables que son necesarias antes de iniciar realmente el método OnTime. Luego llama a la macro StartTimer que realmente establece el temporizador que ejecuta la macro TestWords.

TestWords verifica si el recuento de palabras ha aumentado y, si es así, verifica las últimas cinco palabras ingresadas para ver si coinciden con alguna de sus palabras de activación. (Las palabras de activación se establecen en la matriz tWords, en la macro InitializeTimer. Deben ingresarse en la matriz todas en mayúsculas). Si se detecta una palabra de activación, se ejecuta su código (mysub) y se pasa la palabra de activación a su código.

Cabe señalar que es posible que el recuento de palabras aumente en más de cinco, especialmente si se pega texto en el documento. Si desea que el código verifique todas las palabras que se pueden pegar en el documento, deberá cambiar la línea del código de verificación, que es esta:

If xc > 0 And xc < 5 Then

Todo lo que necesitas hacer es cambiarlo a esto:

If xc > 0 Then

Si desea detener la verificación de palabras, ejecute la macro KillOnTime, que establece una bandera que detiene la verificación de las palabras. Para reiniciar la verificación más tarde, simplemente ejecute InitializeTimer nuevamente.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.

link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

WordTips es su fuente de formación rentable en Microsoft Word.

(Microsoft Word es el software de procesamiento de texto más popular del mundo). Esta sugerencia (12375) se aplica a Microsoft Word 2007, 2010, 2013, 2016, 2019 y Word en Office 365. Puede encontrar una versión de esta sugerencia para interfaz de menú anterior de Word aquí:

link: / word-Running_Macros_Based_on_Keywords [Ejecución de macros basadas en palabras clave].