キーワードに基づくマクロの実行(Microsoft Word)
Eyalは、ユーザーが特定の単語やフレーズを入力した場合にマクロを自動的に実行する方法があるかどうか疑問に思います。
残念ながら、テキストがドキュメントに入力されたことを検出するWordVBAイベントプロシージャはありません。ただし、Wordは単語全体が入力されたことを内部で検出するため、スペルチェック、オートコレクト、単語数の更新などを実行できます。ただし、この内部検出方法を利用することはできません。
おそらく最善のアプローチは、VBAのタイマー機能を使用して単語が入力されたかどうかを確認することです。 (覚えておいてください-Wordは単語が完了するたびに単語数を内部的に更新するので、タイマーコードは単語数が変更されたかどうかを監視できます。)OnTimeメソッドの最小設定は1秒です。つまり、タイマーは-ベースのコードは1秒に1回しか実行できません。速いタイピストが1秒間に複数の単語を入力する可能性があるため、コードは入力された最後の数単語を実際にチェックする必要があります。
使用できるコードは次のとおりです:
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
実行する必要のある最初のルーチンは、InitializeTimerマクロです。実際にOnTimeメソッドを開始する前に必要な変数を設定します。次に、TestWordsマクロを実行するタイマーを実際に設定するStartTimerマクロを呼び出します。
TestWordsは、単語数が増加したかどうかを確認し、増加した場合は、最後に入力した5つの単語を確認して、トリガー単語のいずれかに一致するかどうかを確認します。 (トリガーワードは、InitializeTimerマクロのtWords配列に設定されます。配列にはすべて大文字で入力する必要があります。)トリガーワードが検出されると、コード(mysub)が実行され、トリガーワードが渡されます。あなたのコードに。
特にテキストがドキュメントに貼り付けられている場合は、単語数が5を超えてジャンプする可能性があることに注意してください。ドキュメントに貼り付けられる可能性のあるすべての単語をコードでチェックする場合は、チェックコードの行を変更する必要があります。これは次のとおりです。
If xc > 0 And xc < 5 Then
あなたがする必要があるのはこれにそれを変えることだけです:
If xc > 0 Then
単語のチェックを停止する場合は、KillOnTimeマクロを実行します。このマクロは、単語のチェックを停止するフラグを設定します。後でチェックを再開するには、InitializeTimerを再度実行します。
注:
このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
link:/ wordribbon-WordTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]
。
_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。
(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(12374)は、Microsoft Word 97、2000、2002、および2003に適用されます。Wordのリボンインターフェイス(Word 2007)用のこのヒントのバージョンを見つけることができます。以降)ここ:
link:/ wordribbon-Running_Macros_Based_on_Keywords [キーワードに基づいてマクロを実行する]
。