ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시트 숨기기 일괄 처리
    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
    당비휴 근무일지 달력  (0) 2023.02.10
    공휴일 적용된 달력  (0) 2021.02.10
    유효성검사 유일값 가져오기  (0) 2021.01.19
    미디어 파일을 날짜별로 분류  (6) 2019.12.25

    댓글