Ejecución de macros función de palabras clave

July 21

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 hay procedimientos de evento Palabra VBA que detectan cuando el texto está escrito en un documento. Sin embargo, Word detecta internamente cuando se introduce una palabra completa para que pueda llevar a cabo las cosas tales como la corrección ortográfica, Autocorrección, y actualizar el número de palabras. No se puede aprovechar este método de detección interna, sin embargo.

Probablemente el mejor enfoque consiste en utilizar la capacidad de temporizador de VBA para comprobar si una palabra se ha introducido. (Recuerde-Word actualiza internamente el número de palabras cada vez que una palabra se completa, por lo que su código de temporizador puede controlar el número de palabras para ver si ha cambiado.) El método OnTime tiene un valor mínimo de un segundo, lo que significa que tu con temporizador código basado sólo puede ejecutarse una vez por segundo. Es posible que un mecanógrafo rápido para escribir más de una palabra por segundo, por lo que su código debe comprobar realmente las últimas palabras entraron.

Este es el código que puede utilizar:

Dim wCount como de largo
Dim ARANGE como gama
Twords Dim
Dim inactiveSW As Boolean

Sub InitializeTimer ()
twords = Array ("APPLE", "NARANJA", "pera")
wCount = ActiveDocument.Words.Count
Set ARANGE = Selection.Range
aRange.Start = ActiveDocument.Range.Start
inactiveSW = false
StartTimer
End Sub

Public Sub startTimer ()
Application.OnTime Cuándo: = ahora + TimeValue ("00:00:01"), _
Nombre: = "TestWords"
End Sub

TestWords Public Sub ()
Dim Testword As String
Dim i como de largo
K Dim como de largo
Kw Dim como de largo
Xc Dim como de largo

Si inactiveSW Then Exit Sub
Con ActiveDocument
xc = .Range.Words.Count - wCount
Si xc> 0 Y xc <5 Entonces
aRange.End = Selection.End
kw = aRange.Words.Count - 1
Si kw> 0 Then
Para k = kw - xc + 1 Para kw
Testword = UCase (Trim (aRange.Words (k) .Texto))
Para i = 0 Para UBound (twords)
Si Testword = twords (i), entonces
mysub (Testword)
Salir Para
End If
Siguiente i
Siguiente k
End If
End If
wCount = .Range.Words.Count
End With
StartTimer
End Sub

Public Sub KillOnTime ()
"No se puede detener el temporizador para que ajuste el interruptor inactivos
inactiveSW = True
End Sub

Sub mySub (s como secuencia)
'Esta subrutina se ejecuta cuando se introduce una palabra especial
MsgBox s
End Sub

La primera rutina que necesita para funcionar es la macro InitializeTimer. En él se establecen las variables que son necesarias antes de iniciar realmente el método OnTime. A continuación, llama la macro startTimer que realmente establece el tiempo que se ejecuta la macro TestWords.

TestWords comprueba si el recuento de palabras se ha incrementado y, si tiene, comprueba los últimos cinco palabras entraron para ver si coinciden con ninguna de sus palabras de activación. (Las palabras de activación se encuentran en la matriz twords, en la macro InitializeTimer. Ellos deben introducirse en la matriz de todo en mayúsculas). Si se detecta una palabra gatillo, se ejecuta el código (mysub), y se pasa la palabra gatillo a su código.

Cabe señalar que puede ser posible para el recuento de la palabra para saltar por más de cinco, en particular si el texto se pega en el documento. Si desea que el código para comprobar todas las palabras que se pueden pegar en el documento, entonces usted tendrá que cambiar la línea de código de verificación, que es la siguiente:

Si xc> 0 Y xc <5 Entonces

Todo lo que necesitas hacer es cambiarlo a esto:

Si xc> 0 Then

Si desea detener la palabra de cheques, ejecutar la macro KillOnTime, que establece un indicador que para las palabras que se comprueba. Para la comprobación de reinicio después, justo vuelva a ejecutar InitializeTimer.

WordTips es su fuente de formación de Microsoft Word rentable. (Microsoft Word es el procesador de textos más popular en el mundo.) Esta punta (12 374) se aplica a Microsoft Word 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Word (Word 2007 y más tarde) aquí: Correr Macros partir de palabras clave.