반응형
오늘은 VBA 폼을 잘 다루기 위한 연습 문제입니다. 구현할 예제는 폼에 있는 모든 체크 박스 컨트롤들을 한번에 체크 또는 해제하는 하는 것입니다. 그러니까 폼에 있는 모든 컨트롤을 일일이 지정하지 않고 반복문을 돌면서 한번에 제어하는 방법을 익히는 것이 목적입니다. UserForm 의 Controls 속성에는 폼에 추가한 모든 컨트롤 개체가 담겨 있습니다. 이것을 하나씩 분해해서 체크 박스를 찾는 것입니다.
▼ 먼저 [삽입] 메뉴 > [사용자 정의 폼]을 선택해서 새로운 Form 을 추가합니다.
▼ 다음은 Form 화면에 체크 박스를 여러 개 추가하고 오른쪽에 버튼을 하나 만듭니다. 이 버튼을 클릭해서 폼에 있는 모든 체크 박스를 체크 또는 해제하게 됩니다.
▼ 버튼을 눌렀을 때 체크 박스를 모두 체크할 것인지 아니면 해제할 것인지의 판단은 버튼 이름으로 하게 됩니다. “모드 체크” 라고 되어 있으면 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 셀 참조하는 여러가지 방법 |
반응형
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 모듈 소스 다른 통합 문서에 복사하기 (0) | 2023.03.17 |
---|---|
엑셀 VBA 선택한 영역 재조절 기능 Selection.Resize 함수 사용하기 (2) | 2023.03.17 |
엑셀 VBA 문자가 포함된 숫자만 합치기 (0) | 2023.03.07 |
엑셀 VBA 16진수 > 10진수, 10진수 > 16진수 헥사값 알아오기 (2) | 2023.03.06 |
엑셀 VBA 단위 변환 사용자 정의 폼 만들기 (0) | 2023.03.01 |
엑셀 VBA 레지스트리 키값 읽어오기 (1) | 2023.02.24 |
엑셀 VBA 시트에서 데이터 셀 영역 구하기 (2) | 2023.02.22 |
엑셀 VBA 영어 첫 글자만 대문자로 변경하는 방법 (2) | 2023.02.05 |