2

我有一个用户窗体,其中包含一些带有图像的按钮。然后,当我单击按钮/图像时,我想要三个空白标签,图像显示在第一个标签中。然后,如果我单击另一个按钮/图像,则第二个标签是图像,第三个标签也是如此。

36 个按钮标记为 btn1 到 btn36 三个空白标签名为 capture1 capture2 capture3

我不确定我是否需要发布任何其他信息。

我需要帮助为此编写代码(VBA)

4

1 回答 1

3

从按钮获取图像到标签的基础很简单:

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 例程。

于 2011-04-08T15:50:37.117 回答