Daily Life of BlueRose

컴퓨터 & 코딩 공부/엑셀 & VBA

엑셀 VBA 기본기능 정리 - 시트 관련 속성 및 메서드

푸른로즈 2023. 7. 5. 23:32
728x90

엑셀 VBA 기본기능 정리 - 시트 관련 속성 및 메서드

 

  • 추가하기 : add
    • .add after=ActiveSheet, Count:=3 : 액티브 시트 뒤에 3개의 시트 추가
    • .add after=sheets(sheets.Count), Count:=3 : 가장 뒤편에 3개의 시트 추가
    • .add.name=i&"월" : (For문 사용시 주로 사용) 생성과 동시에 이름 변경※ 시트의 이름 등을 호출하기 위한 시트번호는 '시트의 순서'이다. 예를들어 4번째 시트는 sheets(4)이다.
  • 삭제하기 : delete
    • 경고창이 뜨므로, 시행 전ㆍ후에 각각 Application.DisplayAlert = False / True를 입력하여 한시적 으로 경고창을 제거해야 한다.
    • 주로 메인시트.Activate 후, 이터레이터와 무관하게 액티브시트의 인덱스+N(상수)만큼 떨어진 시트를 삭제하는 구조로 코딩한다(1시트를 삭제하면 1시트가 밀려들어오기 때문)
    • 활용예시
Dim it As Long
Appliction.DisplayAlerts = False
Sheets(1).Activate
For it = 1 To 12
    Sheets(ActiveSheet.Index + 2).Delete
Next
Appliction.DisplayAlerts = True

 

  • 숨기기/보이기 : visible
    • 여러개의 시트를 조작하는 경우 동적배열 변수를 선언한 후, For문으로 조작하고 'Sheet(변수명).Visible = True'의 형태로 조작한다.
    • 활용예시 – 특정 시트 제외한 모든 시트 일괄 숨기기
Dim sh As Worksheet
Dim s()						'숨길 시트를 저장할 배열 선언
Dim i As Long
For Each sh In ThisWorkbook.Worksheets
    If sh.Name = "main" Then				'main시트 및 특정 명칭의 시트는 숨기기에서 제외
    ElseIf sh.Name = "시트명" Then
    Else
        ReDim Preserve s(i)				'나머지 시트는 모두 배열 s에 저장
        s(i) = sh.Name
        i = i + 1
    End If
Next

Sheets(s).Visible = False           			'동적배열의 인덱스()를 표기하지 않음에 주의

 

    • 복사/이동하기 : copy/move
      • 속성으로 인수로 after/before를 취하며, 둘 중 하나만 사용가능하다. 또한, 인수를 취하지 않으면 새창을 이동한다.
      • 해당시트.Sheets.Count를 통해 가장 마지막장에 시트를 추가할 수 있다.
      • 활용예시 : 특정파일의 시트 모두 불러오기

 

Dim tempFile As Workbook            '열었다가 복사/이동만 하고 닫을 임시파일 워크북 개체
Dim tempFileName As String
Dim tempFileSh						'순회용 변수
Dim i As Long						'순회용 변수
Dim thisWb As Workbook              '통합의 주체가 되는 워크북
    Set thisWb = ActiveWorkbook

tempFileName = Application.GetOpenFilename(filefilter:="Excel Files(*.xls*),*.xls*")
    If tempFileName <> "False" Then  '파일명을 받되, 파일명이 False일 경우 함수 종료
    Else: Exit Sub
    End If

Set tempFile = Workbooks.Open(tempFileName)			'파일 열기
tempFileSh = tempFile.Sheets.Count		'반복문을 위하여 임시파일의 시트 개수 파악

For i = 1 To tempFileSh					'해당 파일 내 모든 시트를 갖고 오기 위한 반복문 시작
    tempFile.Sheets(i).Copy after:=thisWb.Sheets(thisWb.Sheets.Count)	'가장 마지막 순서로 시트 이동
Next
On Error Resume Next
tempFile.Close savechanges:=xlNo		'열었던 파일은 저장하지 않고 닫음
On Error GoTo 0

 

  • 특정 명칭의 시트 존재여부 확인
dim uSh as WorkSheet
For Each uSh in ActiveWorkbook.Worksheets
    If uSh.Name = "찾고자하는_워크시트명“ then 
        MsgBox "이미 해당시트가 존재함”
        exit sub 						'중복값이 존재함에 따라 프로시저 종료
Next							'중복값이 없었다면 수행할 작업은 이후에 기재
반응형