Основы получения изображения с кнопки для надписи просты:
Capture1.Picture = btn1.picture
Настоящая головная боль заключается в том, что вы не можете назначить один и тот же кусок кода нескольким событиям Button.Click.в VBA.Не так, как в 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.