Ausführen von Makros basierend auf Schlüsselwörtern (Microsoft Word)
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 (12374) gilt für Microsoft Word 97, 2000, 2002 und 2003. Sie finden eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Word (Word 2007) und später) hier: