Excel 양식에 CheckBox를 넣으려면 양식도구를 이용해서 추가하여 사용하는데,
실제로 일반 사용자가 사용하기에는 익숙하지 않은 도구입니다.
이를 위하여 사용자가 쉽게 CheckBox를 셀에서 사용할 수 있도록 해 봅니다.
이 기능은 Microsoft 365에서 기본기능으로 추가할 예정인 것을 미지원 버전에서 사용할 수 있도록 모사 구성한 것입니다.
EGTools를 사용하시는 분은 v3.9.5에서 지원하기 때문에 중복으로 사용시 문제 발생할 수 있습니다.
기본적인 아이디어는 셀서식중 조건을 반영할 수 있는 것을 기준으로
1=Check, 0=Uncheck를 설정하고, 해당하는 문자를 Unicode에서 넣어 주는 것입니다.
적용 셀서식 : [=1]"☑";[=0]"⬜";""
추가하는 김에 유효성 검사에 0과 1만 넣을 수 있도록 추가합니다.
이를 사용자기 쉽게 사용할 수 있도록 Excel 리본메뉴에 추가하여
선택영역에 CheckBox 셀서식을 적용하는 매크로를 넣습니다.
Private Sub ApplyCheckBox()
Dim sNumFmt As String, c As Range
If TypeName(Selection) <> "Range" Then Exit Sub
sNumFmt = Selection.Cells(1, 1).NumberFormat
If InStr(1, sNumFmt, ChrW(9745)) And InStr(1, sNumFmt, ChrW(11036)) Then
''//Selection.NumberFormat = "General"
Else
For Each c In Selection.Cells
If IsEmpty(c) Then
With c
.Validation.Delete
.Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="0", Formula2:="1"
.NumberFormat = "[=1]""" & ChrW(9745) & """;[=0]""" & ChrW(11036) & """;"""""
.Value = 0
.HorizontalAlignment = xlCenter
End With
End If
Next c
End If
End Sub
추가로, 리본메뉴에서 호출 할 수 있도록 CallBack 함수를 작성합니다.
Public Sub rbnApplyCheckBox(control As IRibbonControl) '체크박스 적용/해제
ApplyCheckBox
End Sub
그리고, 적용된 셀을 더블클릭했을 때에 상태를 변경시키는 이벤트 매크로를 추가합니다.
아래 매크로는 "현재_통합_문서" 모듈에 추가하여야 합니다.
값이 1이나 0일 때는 값을 서로 바꿔주고, 나머지는 무시합니다.
이벤트 매크로에서 Cancel = True로 설정하면 셀을 더블클릭했을 때에 수정상태로 진입하지 않게 됩니다.
Private Sub Workbook_SheetBeforeDoubleClick(ByVal sh As Object, ByVal Target As Range, Cancel As Boolean)
'// CheckBox 적용 관련
Dim sNumFmt As String, vVal As Variant
sNumFmt = Target.Cells(1, 1).NumberFormat
If InStr(1, sNumFmt, "[=1]") And InStr(1, sNumFmt, "[=0]") Then
If Target.Cells.HasFormula Then GoTo EXIT_RUN '//수식적용일 경우 동작금지
vVal = Target.Cells(1, 1).Value2
Select Case vVal
Case 0: Target.Cells(1, 1) = 1: Cancel = True
Case 1: Target.Cells(1, 1) = 0: Cancel = True
Case Else:
End Select
End If
EXIT_RUN:
End Sub
주의할 점은 이 기능을 사용하면 Excel의 되돌리기(Undo) 기능이 매우 제한됩니다.
- CheckBox 메뉴 버튼을 눌러 셀서식을 변경한 경우
- 각 셀을 더블클릭하여 상태를 변경한 경우
상기 2가지 작업이 수행되는 즉시 되돌리기(Undo) 이력이 모두 삭제 됩니다.
체크박스를 이용할 때에는 더블클릭으로 체크(☑)와 체크해제(⬜)를 변경할 수 있으며
셀에 직접 입력시 1을 입력하면 체크, 0을 입력하면 체크해제가 됩니다.
여러 셀을 입력할 때에는 Ctrl키를 누른채로 여러 셀을 선택후, 1을 넣고, Ctrl+Enter로 입력하세요.
체크박스 적용을 해제하려면 [홈]탭의 "편집"부분에 있는 "지우기 - 시식 지우기"를 선택하면 일반 셀로 전환됩니다.
이 기능은 EGTools v3.9.5에 추가되었으며, 단독으로 사용 가능한 샘플을 첨부합니다.
'Excel - VBA' 카테고리의 다른 글
[VBA] Module이나 Sub의 크기 한계 (3) | 2023.12.10 |
---|---|
[Excel] 기존 리본 메뉴에 Custom 그룹 삽입하기 (0) | 2023.11.27 |
[VBA] 선택한 행/열 강조하기 (0) | 2023.11.25 |
문제은행 (ExamBank)으로 시험준비 하기 (2) | 2023.11.24 |
[VBA] RTF(Rich Text Format) 을 Plain Text로 변경 (0) | 2023.11.02 |