Ejecución de macros basadas en palabras clave (Microsoft Word)
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]
.