Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기

엑셀(Excel)/VBA
반응형

오늘은 VBA 폼을 잘 다루기 위한 연습 문제입니다. 구현할 예제는 폼에 있는 모든 체크 박스 컨트롤들을 한번에 체크 또는 해제하는 하는 것입니다. 그러니까 폼에 있는 모든 컨트롤을 일일이 지정하지 않고 반복문을 돌면서 한번에 제어하는 방법을 익히는 것이 목적입니다. UserForm Controls 속성에는 폼에 추가한 모든 컨트롤 개체가 담겨 있습니다. 이것을 하나씩 분해해서 체크 박스를 찾는 것입니다.

 

 

먼저 [삽입] 메뉴 > [사용자 정의 폼]을 선택해서 새로운 Form 을 추가합니다.

엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기

 

다음은 Form 화면에 체크 박스를 여러 개 추가하고 오른쪽에 버튼을 하나 만듭니다. 이 버튼을 클릭해서 폼에 있는 모든 체크 박스를 체크 또는 해제하게 됩니다

엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기

 

 

버튼을 눌렀을 때 체크 박스를 모두 체크할 것인지 아니면 해제할 것인지의 판단은 버튼 이름으로 하게 됩니다. “모드 체크라고 되어 있으면 bchk = True 저장하고 버튼 이름을 바꿔 줍니다.

If CommandButton1.Caption = "모두 체크" Then
    bchk = True
    CommandButton1.Caption = "모두 해제"
Else
    bchk = False
    CommandButton1.Caption = "모두 체크"
End If
 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 매크로 실행 버튼으로 코드 실행하기
엑셀 VBA 개발을 위한 개발 도구 추가하는 방법
엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기
엑셀 VBA 개발 도구를 이용해서 버튼 삽입하고 함수 연결하기
셀 VBA 참조하는 여러가지 방법

 

 

 

다음은 UserForm5.Controls 속성을 가지고 For 문을 돌면서 컨트롤들을 하나씩 꺼냅니다. 그리고 컨트롤의 타입명이 CheckBox 인지 체크해야겠죠. TypeName() 함수로 알수 있습니다. TypeName() CheckBox 인 컨트롤은 모두 True/False 로 세팅합니다. 

For Each contr In UserForm5.Controls
    If TypeName(contr) = "CheckBox" Then
        contr.Value = bchk
    End If
Next

 

 

버튼 이벤트에 대한 함수의 전체 내용은 다음과 같습니다. 좀더 이해하기 쉽도록 동영상을 만들어서 올렸습니다. 참고하시기 바랍니다.

Private Sub CommandButton1_Click()
    Dim contr As Control
    Dim bchk As Boolean
   
    If CommandButton1.Caption = "모두 체크" Then
        bchk = True
        CommandButton1.Caption = "모두 해제"
    Else
        bchk = False
        CommandButton1.Caption = "모두 체크"
    End If
   
    For Each contr In UserForm5.Controls
        If TypeName(contr) = "CheckBox" Then
            contr.Value = bchk
        End If
    Next
End Sub

엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기

 ※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다.
엑셀 VBA 매크로 실행 버튼으로 코드 실행하기
엑셀 VBA 개발을 위한 개발 도구 추가하는 방법
엑셀 VBA 매크로 디버깅, 디버그 코드 분석하기
엑셀 VBA 개발 도구를 이용해서 버튼 삽입하고 함수 연결하기
셀 VBA 참조하는 여러가지 방법
반응형
Posted by 녹두장군1
,