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

엑셀(Excel)/VBA

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

 

환경: Microsoft Excel 2013

 

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

 

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

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

 

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

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

 

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

 

If CommandButton1.Caption = "모두 체크" Then

    bchk = True

    CommandButton1.Caption = "모두 해제"

Else

    bchk = False

    CommandButton1.Caption = "모두 체크"

End If

 

다음은 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 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기

Posted by 녹두장군