2011-04-08 8 views
2

이미지가있는 버튼으로 구성된 사용자 정의 폼이 있습니다. 그런 다음 첫 번째 레이블에 이미지가 표시되는 단추/이미지를 클릭 할 때 원하는 세 개의 빈 레이블이 있습니다. 그런 다음 다른 버튼/이미지를 클릭하면 두 번째 레이블이 이미지이고 세 번째 레이블도 동일합니다. 내가 어떤 다른 정보 여부를 게시해야하는 경우 capture1의 capture2의 capture3 이름 btn36 세 빈 라벨을 통해 인 btn1 표시레이블 내의 이미지 캡쳐

(36) 버튼을

잘 모르겠어요.

나는이 (VBA)에 대한 코드

답변

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 

을하지만 당신은 여전히 ​​CaptureImage의 서브 루틴을 호출 36 _CLICK 루틴 종료됩니다.