我有一个用户窗体,其中包含一些带有图像的按钮。然后,当我单击按钮/图像时,我想要三个空白标签,图像显示在第一个标签中。然后,如果我单击另一个按钮/图像,则第二个标签是图像,第三个标签也是如此。
36 个按钮标记为 btn1 到 btn36 三个空白标签名为 capture1 capture2 capture3
我不确定我是否需要发布任何其他信息。
我需要帮助为此编写代码(VBA)
从按钮获取图像到标签的基础很简单:
Capture1.Picture = btn1.picture
真正令人头疼的事实是,您不能将相同的代码块分配给 VBA 中的多个 Button.Click 事件。不像在 VB 中的语法是:
Sub MyRoutine(sender, <args>) Handles Button1.Click, Button2.Click...
在 VBA 中,您基本上需要 36 个不同的 _Click 例程,每个按钮 1 个。设置模块级计数器以跟踪您要引用的标签。
Dim counter As Integer
Private Sub UserForm_Activate()
counter = 1
End Sub
Private Sub btn1_Click()
If counter > 3 Then
counter = 1
End If
Controls("capture" & counter).Picture = btn1.Picture
counter = counter + 1
End Sub
您将需要 36 个与此相同的例程,但每个例程中的按钮名称除外。幸运的是,您主要可以通过剪切和粘贴来完成。
如果你这样做,你可以节省几行代码:
Private Sub btn1_Click()
Call CaptureImage(btn1.Name)
End Sub
Private Sub btn2_Click()
Call CaptureImage(btn2.Name)
End Sub
.
.
.
Private Sub CaptureImage(ByVal btnName As String)
If counter > 3 Then
counter = 1
End If
Controls("capture" & counter).Picture = Controls(btnName).Picture
counter = counter + 1
End Sub
但您最终仍会得到 36 个调用 CaptureImage 子例程的 _Click 例程。