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
我有一个用户窗体,在 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