2016-10-03 13 views
2

私は10個のImageBox内に10個の画像を持つuserformを持っています。VBA Excelユーザーフォーム。どの画像をクリックしたかを確認する方法

Private Sub Image1_Click() 
    MsgBox "Image 1 clicked!" 
End Sub 

しかし、10枚の画像があるので、私は10回以上のコードを繰り返す必要があります:私は、私はこのようにクリックされたものを画像決定できることをご存知ですか?

Private Sub Image1_Click() 
    MsgBox "Image 1 clicked!" 
End Sub 

Private Sub Image2_Click() 
    MsgBox "Image 2 clicked!" 
End Sub 

Private Sub Image3_Click() 
    MsgBox "Image 3 clicked!" 
End Sub 

Private Sub Image4_Click() 
    MsgBox "Image 4 clicked!" 
End Sub 

etc 

もっとエレガントで簡潔な方法がありますか?

+0

が重複する可能性があり、シンクイベントを使用する必要がありますまたはVBA Excelのコレクション](http://stackoverflow.com/questions/1909763/object-array-or-collection-in-vba-excel) – Comintern

答えて

2

クラスモジュールで、cls_CustomImageは、ユーザーフォームの開口部に続いて

Private WithEvents customImage As Image 

Public Sub InitialiseCustomImage(imgToCusomise As Image) 
    Set customImage = imgToCusomise 
End Sub 
Private Sub customImage_Click() 
    MsgBox customImage.Name 
End Sub 

を以下していると呼ばれるようにするには、[オブジェクト配列の次

Public colCustomImages As Collection 

Private Sub UserForm_Initialize() 
Dim ctl As Control 
Dim clsCustomImage As cls_CustomImage 

Set colCustomImages = New Collection 

For Each ctl In Me.Controls 

    If TypeName(ctl) = "Image" Then 
     Set clsCustomImage = New cls_CustomImage 
     clsCustomImage.InitialiseCustomImage ctl 
     colCustomImages.Add clsCustomImage 
    End If 

Next ctl 
End Sub 
+0

これは私が知っている唯一の方法です。これはhttp://www.siddharthrout.com/2011/08/05/vba-control-arrays/と一緒になります –

関連する問題