VBA Excel用户窗体。 如何确定哪个图像被点击

我有一个用10个ImageBox的10个图像的用户窗体。 我知道,我可以确定像这样被点击的图像:

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 

或者有一个更优雅和简洁的方法?

你需要使用事件沉没,所以在一个类模块中,称为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