Eyal fragt sich, ob es eine Möglichkeit gibt, ein Makro automatisch auszuführen, wenn ein Benutzer ein bestimmtes Wort oder eine bestimmte Phrase eingibt.

Leider gibt es keine Word VBA-Ereignisprozeduren, die erkennen, wann Text in ein Dokument eingegeben wird. Word erkennt jedoch intern, wenn ein vollständiges Wort eingegeben wurde, sodass es beispielsweise Rechtschreibprüfung, automatische Korrektur und Aktualisierung der Wortanzahl ausführen kann. Sie können diese interne Erkennungsmethode jedoch nicht nutzen.

Der wahrscheinlich beste Ansatz besteht darin, mithilfe der Timer-Funktion von VBA zu überprüfen, ob ein Wort eingegeben wurde. (Denken Sie daran: Word aktualisiert die Wortanzahl intern jedes Mal, wenn ein Wort vervollständigt wird, sodass Ihr Timer-Code die Wortanzahl überwachen kann, um festzustellen, ob sie sich geändert hat.) Die OnTime-Methode hat eine Mindesteinstellung von einer Sekunde, was bedeutet, dass Ihr Timer- basierter Code kann nur einmal pro Sekunde ausgeführt werden. Es ist möglich, dass ein schneller Schreibkraft mehr als ein Wort pro Sekunde eingibt, sodass Ihr Code die zuletzt eingegebenen Wörter überprüfen muss.

Hier ist der Code, den Sie verwenden können:

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

Die erste Routine, die Sie ausführen müssen, ist das InitializeTimer-Makro. Es werden die Variablen eingerichtet, die erforderlich sind, bevor die OnTime-Methode tatsächlich gestartet wird. Anschließend wird das StartTimer-Makro aufgerufen, mit dem der Timer festgelegt wird, unter dem das TestWords-Makro ausgeführt wird.

TestWords prüft, ob sich die Wortanzahl erhöht hat, und überprüft, falls vorhanden, die letzten fünf eingegebenen Wörter, um festzustellen, ob sie mit einem Ihrer Auslösewörter übereinstimmen. (Die Triggerwörter werden im tWords-Array im InitializeTimer-Makro festgelegt. Sie sollten in Großbuchstaben in das Array eingegeben werden.) Wenn ein Triggerwort erkannt wird, wird Ihr Code (mysub) ausgeführt und das Triggerwort übergeben zu Ihrem Code.

Es sollte beachtet werden, dass es möglich sein kann, dass die Wortzahl um mehr als fünf springt, insbesondere wenn Text in das Dokument eingefügt wird. Wenn Sie möchten, dass der Code alle Wörter überprüft, die möglicherweise in das Dokument eingefügt werden, müssen Sie die Überprüfungscodezeile wie folgt ändern:

If xc > 0 And xc < 5 Then

Alles was Sie tun müssen, ist es zu ändern:

If xc > 0 Then

Wenn Sie die Wortprüfung beenden möchten, führen Sie das KillOnTime-Makro aus, das ein Flag setzt, das die Prüfung der Wörter verhindert. Um die Überprüfung später erneut zu starten, führen Sie InitializeTimer einfach erneut aus.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.

(Microsoft Word ist die weltweit beliebteste Textverarbeitungssoftware.) Dieser Tipp (12375) gilt für Microsoft Word 2007, 2010, 2013, 2016, 2019 und Word in Office 365. Eine Version dieses Tipps finden Sie für ältere Menüoberfläche von Word hier: