시트는 많고
숨길 것도 많고 다시 보이게 할 것도 많은데
엑셀 버전이 낮아서 일괄 처리가 안 될 때
쉽게 처리할 수 있는 추가기능입니다.
엑셀 파일 열어서 '매크로 사용 허용'을 해주시면
리본메뉴에 '추가기능' 탭이 생깁니다.
추가기능 탭에 생성된 '시트 보이기 조정' 아이콘을 눌러보세요
Option Explicit
Private Sub UserForm_Initialize()
Dim i As Integer
Dim j As Integer
Dim roundUpSheetscount As Integer
Dim chkboxLeft As Integer
Dim chkBox As MSForms.checkbox
'시트 숫자를 2로 나눔. 체크박스 줄 세우기 위한 용도
roundUpSheetscount = WorksheetFunction.RoundUp(Sheets.Count / 2, 0)
'체크박스 생성 왼쪽위치
chkboxLeft = 12
'시트명을 체크박스로 출력
'보이는 건 체크, 숨긴 처리된 건 체크해제
For i = 1 To Sheets.Count
Set chkBox = Frame1.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i)
With chkBox
.Caption = Sheets(i).Name
.Left = chkboxLeft
.Top = 12 + (j * 20)
.Width = 69
'시트 숨김 되어있으면 체크해제. 아니면 체크
If Sheets(i).Visible = xlSheetVisible Then .Value = True
End With
j = j + 1
If i = roundUpSheetscount Then
j = 0
chkboxLeft = 90
End If
Next i
'프레임 및 유저폼 사이즈 조정
Frame1.Height = chkBox.Height * (roundUpSheetscount + 2.5)
Me.Height = Frame1.Height + 50
End Sub
Private Sub Confirm_Click()
Dim C As MSForms.Control
Application.ScreenUpdating = False
'체크박스가 0개면 에러메시지 출력
If CheckAllUnchecked("CheckBox") = 0 Then
MsgBox "시트 하나는 선택해주세요"
Exit Sub
End If
'마지막 시트만 보이게 하기(에러 방지)
Sheets(Sheets.Count).Visible = xlSheetVisible
'체크박스 순환하면서 시트 숨기거나 보이게 하기
For Each C In Me.Controls
If TypeName(C) = "CheckBox" Then
If C.Value = True Then
Sheets(CStr(C.Caption)).Visible = xlSheetVisible
Else
Sheets(CStr(C.Caption)).Visible = xlSheetHidden
End If
End If
Next C
Unload Me
Application.ScreenUpdating = True
End Sub
Private Function CheckAllUnchecked(checkbox As String) As Integer
'체크된 체크박스 숫자 세기
Dim C As MSForms.Control
Dim i As Integer
For Each C In Me.Controls
If TypeName(C) = checkbox Then
If C.Value = True Then i = i + 1
End If
Next C
CheckAllUnchecked = i
End Function
Private Sub cancle_Click()
Unload Me
End Sub
|
cs |
'VB(A)' 카테고리의 다른 글
폴더를 순환하며 파일을 루트로 옮기기 (0) | 2024.04.17 |
---|---|
당비휴 근무일지 달력 (2) | 2023.02.10 |
공휴일 적용된 달력 (0) | 2021.02.10 |
유효성검사 유일값 가져오기 (0) | 2021.01.19 |
미디어 파일을 날짜별로 분류 (6) | 2019.12.25 |