大量のテキスト ボックスができてしまった場合は、カスタム クラスでイベント ハンドラーをカスタマイズする方が簡単な場合があります。
標準モジュールでは、グローバル スコープのコレクション変数を配置します。
Public gcolTextboxes As Collection
CTbxEvents というカスタム クラス モジュールを作成します。
Private WithEvents mtb As MSForms.TextBox
Public Property Get tb() As MSForms.TextBox
Set tb = mtb
End Property
Public Property Set tb(otb As MSForms.TextBox)
Set mtb = otb
End Property
Private Sub mtb_Change()
tb.Font.Size = 11
tb.Font.Bold = True
End Sub
最後に、ThisDocument で、ドキュメントが開いたときにすべてのテキスト ボックスを読み込みます。
Private Sub Document_Open()
Dim f As Field
Dim clsTbxEvents As CTbxEvents
'Globally scoped collection to hold the classes
Set gcolTextboxes = New Collection
'Loop throught the fields
For Each f In Me.Fields
'Only fields that are activex controls
If f.Type = wdFieldOCX Then
'only activex controsl that are textboxes
If TypeOf f.OLEFormat.Object Is MSForms.TextBox Then
'create a new class, add the textbox, add to collection
Set clsTbxEvents = New CTbxEvents
Set clsTbxEvents.tb = f.OLEFormat.Object
gcolTextboxes.Add clsTbxEvents
End If
End If
Next f
End Sub
これで、追加したテキスト ボックスはすべて同じイベント ハンドラーを使用するようになり、別のサブルーチンを呼び出す必要がなくなりました。本当にテキストボックスが 3 つしかない場合は、おそらくやり過ぎです。