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_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(12375)は、Microsoft Word 2007、2010、2013、2016、2019、およびOffice 365のWordに適用されます。このヒントのバージョンは、ここにWordの古いメニューインターフェイス: