VB(A)

시트 숨기기 일괄 처리

당근쨈 2021. 4. 19. 14:51

시트는 많고

숨길 것도 많고 다시 보이게 할 것도 많은데

엑셀 버전이 낮아서 일괄 처리가 안 될 때

쉽게 처리할 수 있는 추가기능입니다.

엑셀 파일 열어서 '매크로 사용 허용'을 해주시면

리본메뉴에 '추가기능' 탭이 생깁니다.

추가기능 탭에 생성된 '시트 보이기 조정' 아이콘을 눌러보세요

 

시트보이게안보이게.xlsm
0.07MB

 

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 / 20)
    
    '체크박스 생성 왼쪽위치
    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 StringAs 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