Eyal si chiede se esiste un modo per eseguire automaticamente una macro se un utente digita una parola o una frase particolare.

Sfortunatamente, non esistono procedure di eventi VBA di Word che rileveranno quando il testo viene digitato in un documento. Tuttavia, Word rileva internamente quando viene immessa una parola completa in modo che possa eseguire operazioni come il controllo ortografico, la correzione automatica e l’aggiornamento del conteggio delle parole. Tuttavia, non è possibile attingere a questo metodo di rilevamento interno.

Probabilmente l’approccio migliore è utilizzare la funzionalità timer di VBA per verificare se è stata inserita una parola. (Ricorda: Word aggiorna internamente il conteggio delle parole ogni volta che una parola viene completata, in modo che il codice del timer possa monitorare il conteggio delle parole per vedere se è cambiato.) Il metodo OnTime ha un’impostazione minima di un secondo, il che significa che il tuo timer- il codice basato può essere eseguito solo una volta al secondo. È possibile che un dattilografo veloce digiti più di una parola al secondo, quindi il tuo codice deve effettivamente controllare le ultime parole inserite.

Ecco il codice che puoi usare:

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 prima routine che devi eseguire è la macro InitializeTimer. Imposta le variabili necessarie prima di avviare effettivamente il metodo OnTime. Quindi chiama la macro StartTimer che imposta effettivamente il timer che esegue la macro TestWords.

TestWords controlla se il conteggio delle parole è aumentato e, in caso affermativo, controlla le ultime cinque parole inserite per vedere se corrispondono a una delle tue parole trigger. (Le parole trigger sono impostate nell’array tWords, nella macro InitializeTimer. Devono essere inserite nell’array tutte in maiuscolo.) Se viene rilevata una parola trigger, il tuo codice (mysub) viene eseguito e la parola trigger viene passata al tuo codice.

Va notato che potrebbe essere possibile che il conteggio delle parole salti di più di cinque, in particolare se il testo viene incollato nel documento. Se vuoi che il codice controlli tutte le parole che possono essere incollate nel documento, dovrai cambiare la riga del codice di controllo, che è questa:

If xc > 0 And xc < 5 Then

Tutto quello che devi fare è cambiarlo in questo:

If xc > 0 Then

Se vuoi interrompere il controllo delle parole, esegui la macro KillOnTime, che imposta un flag che impedisce il controllo delle parole. Per riavviare il controllo in un secondo momento, eseguire nuovamente InitializeTimer.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (12374) si applica a Microsoft Word 97, 2000, 2002 e 2003. È possibile trovare una versione di questo suggerimento per l’interfaccia a nastro di Word (Word 2007 e più tardi) qui: