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