ExcelVBA技 ユーザーフォーム E13U004

E13U004 (Excel2000~2013)
ユーザーフォームの複数コントロールのイベントを纏めて処理する


多くのコントロールに同じような処理をする場合、コントロールの数だけイベントプロシージャを記述していませんか? クラスを用いてイベントを一つのイベントプロシージャで処理するサンプルを示します。
そのユーザーフォームのみで処理する簡易版です。複数のTextBoxを配置してお試し下さい。
全てのTextBoxで右クリックする場合の例

'フォーム モジュール
Option Explicit
Public WithEvents TextBox As MSForms.TextBox
Dim dbox As New Collection

Private Sub TextBox_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _
  ByVal X As Single, ByVal Y As Single)
  If Button = 2 Then '右クリック
    With TextBox
      '↓ここに実際の右クリックした時の処理を記述
      MsgBox .Name & "=" & .Value, , .Parent.Name
    End With
  End If
End Sub

Private Sub UserForm_Initialize()
  'UserForm1 は実際のユーザーフォーム名(オブジェクト名)に変更の事。必須
  Dim uf As UserForm1, tb As Object '←
  If Not Me Is UserForm1 Then Exit Sub '←
  For Each tb In Controls
    If TypeOf tb Is MSForms.TextBox Then
      Set uf = New UserForm1 '←
      Set uf.TextBox = tb
      dbox.Add uf
    End If
  Next
  '以降他のInitialize処理を記述
End Sub