excel - VBA Excel 用户窗体。如何判断哪个图片被点击了

标签 excel vba userform

我有一个用户表单,10 个图像框中有 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

关于excel - VBA Excel 用户窗体。如何判断哪个图片被点击了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39834367/

相关文章:

excel - excel表格中的用户表单-可以添加吗

Excel VBA用户表单列表框动态上下文菜单使用.OnAction方法

excel - 在 VBA Excel 中复制和粘贴循环以实现多个输出

excel - 如何在输入过程中覆盖文本框中的建议文本?

vba - 通过 excel vba GUI 将 excel 文件导出为 txt 格式

vba - 将变量/数组作为函数的参数传递

excel - vbTrue 不是 True

sql-server - 在 Visual Studio 上使用 SSIS ETL 自动调整列宽

excel - VBA ActiveX 控件的大小随着远程桌面连接的增加而增大

excel - VBA/Userform - 将值从文本框传输到带有书签的 Word 不起作用