2016-10-03 27 views
2

我有一個用戶窗體,10個ImageBox裏面有10個圖像。我知道,我能確定已經被點擊了哪些圖片是這樣的: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/一起 –

相關問題