VBA Excel 用户窗体。如何判断点击了哪张图片

VBA Excel UserForm. How to determine which image has been clicked

我有一个用户窗体,在 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的class模块中有以下

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