메뉴
해결 엑셀2019윈도우10

Userform 사용시 컨트롤 코드 줄이는 방법이 궁금합니다.

v
9월 19일 조회 2,093
만들 유저폼에 spinButton이 5개 정도있고 이 버튼과 각 textBox를 연결하려고 합니다.

 

원래 코드는 아래와 같습니다.
Private Sub SpinBtn1_Change()
    TextBox1.Value = SpinBtn2.Value
End Sub

Private Sub SpinBtn2_Change()
    TextBox2.Value = Top2_SpinBtn.Value
End Sub

Private Sub SpinBtn3_Change()
    TextBox3.Value = SpinBtn3.Value
End Sub

Private Sub SpinBtn4_Change()
    TextBox4.Value = SpinBtn4.Value
End Sub

Private Sub SpinBtn5_Change()
    TextBox5.Value = SpinBtn5.Value
End Sub

 

이렇게 작성하는 것이 너무 비효율적인것 같아서 찾아보니 반복문을 사용하여 컨트롤에 코드를 입력할 수 있다는 사실을 발견했고 아래와 같이 코드를 작성했습니다.

물론 이 코드를 적용하기 위해 컨트롤 이름도 tbx1~tbx5, spinBtn1~5 와 같이 변경하였는데 왜 적용이 안되는 것인지 궁금합니다.

혹시 다른 방법이 있을까요?

*아래 sample파일을 첨부합니다.
Sub changeSpinButton()
    Dim i As Integer
    
    For i = 1 To 5

                 Me.Controls("tbx" & i).Value = Me.Controls("spinBtn" & i).Value

    Next i
End Sub

 

댓글 2

원
원조백수 채택된 답변 9월 19일
changeSpinButton()을 호출하는 방법이 없어서 작동이 되지 않습니다.
각각의 스핀버튼에 해당하는 Private Sub SpinBtn5_Change() 이벤트에서 공통적으로 저 프로시저를 호출하도록 하거나
이런 스핀버튼 여거래를 하나로 묶어서 이벤트가 공통적으로 발생할 수 있도록 해야 합니다.
이걸 참고해 보세요.
https://stackoverflow.com/a/51431879

다른 샘플로 Label을 이용해서 공통 이벤트를 활용하는 것은 여기 참고하세요.
https://egtools.tistory.com/entry/VBA-DatePicker-3

 
v
vividmin 작성자 9월 19일
@원조백수 님 그렇군요 일단 알려주신방법으로 적용해보겠습니다! 감사합니다.

 

질문답변 게시판의 최근 글

스크랩 완료