ボタンからラベルに画像を取得する基本は簡単です。
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
ただし、CaptureImage サブルーチンを呼び出す 36 個の _Click ルーチンが残ることになります。