맨 앞의 시트 삭제
맨 앞의 시트를 지우는 코드입니다.
Sub 시트지우기()
Worksheets(1).Delete
End Sub
시트를 삭제하는 방법은
시트를 지정하고 Delete를 사용하면 됩니다.
시트 지울 때 경고 메시지 없애는 방법
맨 앞의 시트를 삭제하는 위 코드를 실행하면 아래 그림과 같이 경고 메시지가 나타납니다.
이 경고메세지는 시트를 제대로 지우는데 도움이 됩니다.
하지만, 경우에 따라서는 이런 경고메시지가 나타나지 않는 것이
더 효율적일 경우가 있습니다.
아래와 같이 코드를 작성하면 경고메세지가 뜨지 않게 할 수 있습니다.
Sub 시트지우기()
Application.DisplayAlerts = False
Worksheets(1).Delete
Application.DisplayAlerts = True
End Sub
Application.DisplayAlerts는 VBA의 경고창을 컨트롤할 수 있습니다.
False로 설정하면 경고창이 나타나지 않고
True로 설정하면 경고창이 나타납니다.
계속해서 False로 설정하면 이 후 다른 코드에서도 경고창이 나타나지 않으므로
꼭 필요한 부분에서만 설정하고
다시 True로 바꾸어야 합니다.
또한 경고 메세지가 숨겨지면 실수로 중요한 시트를 삭제할 수 있으므로 주의해야 합니다.
맨 뒤에 시트 지우는 코드
맨 뒤에 시트를 지우는 코드는 다음과 같습니다.
Sub 시트지우기()
lastSheet = Worksheets.Count
Worksheets(lastSheet).Delete
End Sub
시트가 모두 몇 개 인지 확인 한 후 마지막 시트의 번호를 사용해 지우는 코드입니다.
아래 코드는 마지막 시트의 시트 이름을 확인한 후
시트 이름을 통해 지우는 코드입니다.
Sub 시트지우기()
lastsheetName = Worksheets(Worksheets.Count).Name
Worksheets(lastsheetName).Delete
End Sub
특정 이름의 시트 지우는 코드
아래 코드는 특정 이름의 시트를 지우는 코드입니다.
Sub 시트지우기()
Worksheets("sheet10").Delete
End Sub
하지만 이렇게 특정 시트의 이름을 통해 지우는 코드는
그 이름을 가진 시트가 있는지 먼저 확인을 한 후
시트가 있다면 지우고
없다면 해당 코드를 실행하지 않아야 합니다.
아래 코드는 특정 이름의 시트가 있는지 확인하는 코드입니다.
Sub 시트지우기()
targetSheetName = "sheet10"
On Error Resume Next
Worksheets(targetSheetName).Select
Debug.Print Err.Number
If Err.Number <> 0 Then
Err.Clear
Exit Sub
End If
On Error GoTo 0
Worksheets("sheet10").Delete
End Sub
On Error Resume Next를 통해 에러가 발생하더라도 코드가 실행되게 합니다.
그다음 Worksheets(targetSheetName).Select를 통해 특정 이름의 시트를 선택합니다.
만약 Sheet10 이라는 이름의 시트가 없다면 오류가 발생합니다.
Debug.Print는 오류 코드를 확인하기 위해 적은 것이므로 필요하지 않습니다.
에러에는 항상 고유의 번호가 존재하는데
Err.Number의 값이 0이 아니면, 즉 오류가 발생했으면
에러를 초기화하고, 프로그램을 종료합니다.
On Error Resume Next와 같은 VBA 에러 처리 방법은 아래를 확인하시면 됩니다.
다음은 For Each 문을 통해 특정 시트가 있는지 확인하고
있다면 지우는 코드입니다.
Sub 시트지우기()
targetSheetName = "Sheet10"
For Each ws In Worksheets
Debug.Print ws.Name
If ws.Name = targetSheetName Then
targetFount = True
Exit For
End If
Next ws
If targetFount Then
Worksheets(targetSheetName).Delete
Else
MsgBox "지우려는 시트가 없습니다."
End If
End Sub
특정 시트의 앞에 위치한 시트를 지우는 코드
아래 코드는 특정 시트의 앞에 위치한 시트를 지우는 코드입니다.
특정한 시트의 시트 번호를 알아내고
그 시트 번호에서 -1을 하면 앞의 시트를 지울 수 있습니다.
단, 특정 시트가 제일 첫번째 시트라면 해당 시트의 앞에 시트가 존재할 수 없으므로
시트 삭제를 진행하지 않습니다.
Sub 시트지우기()
targetSheetName = "Sheet10"
SheetIndex = Worksheets(targetSheetName).Index
If SheetIndex > 1 Then
Worksheets(SheetIndex - 1).Delete
Else
MsgBox "해당 시트의 앞에 시트가 없습니다."
End If
End Sub
특정 시트의 뒤에 위치한 시트 지우는 코드
아래 코드는 특정 시트의 뒤에 위치한 시트를 지우는 코드로
특정 시트의 앞에 위치한 시트를 지우는 코드와 논리는 비슷합니다.
다만, 전체 시트의 개수를 알아내고
현재 시트의 위치가 맨 마지막이 아니라면 시트를 지우고
그렇지 않다면 지우지 않습니다.
Sub 시트지우기()
targetSheetName = "Sheet10"
SheetIndex = Worksheets(targetSheetName).Index
If SheetIndex < Worksheets.Count Then
Worksheets(SheetIndex + 1).Delete
Else
MsgBox "해당 시트의 뒤에 시트가 없습니다."
End If
End Sub
현재 활성화된 시트 지우기
특정 시트를 지우는 방법과 동일합니다.
Sub 시트지우기()
targetSheetName = ActiveSheet.Index
SheetIndex = Worksheets(targetSheetName).Index
Worksheets(SheetIndex).Delete
End Sub
활성화된 시트의 앞 또는 뒤에 위치한 시트 지우기
활성화된 시트의 앞에 위치한 시트를 지우는 코드입니다.
특정 시트의 앞 또는 뒤에 위치한 시트를 지우는 방법과 동일합니다.
Sub 시트지우기()
targetSheetName = ActiveSheet.Index
sheetindex = Worksheets(targetSheetName).Index
If sheetindex > 1 Then
Worksheets(sheetindex).Delete
Else
MsgBox "현재 시트가 첫번째 시트 입니다."
End If
End Sub
활성화된 시트의 뒤에 위치한 시트를 지우는 코드입니다.
Sub 시트지우기()
targetSheetName = ActiveSheet.Index
sheetindex = Worksheets(targetSheetName).Index
If sheetindex < Worksheets.Count Then
Worksheets(sheetindex).Delete
Else
MsgBox "현재 시트가 마지막 시트 입니다."
End If
End Sub
주 의 사 항
시트를 지울 때 주의할 사항은
시트의 개수를 확인해야 한다는 것입니다.
엑셀은 시트가 반드시 하나 이상 있어야 하므로
시트가 한개 일 때는 지울 수 없습니다.
그러므로 항상 시트의 개수를 확인하는 코드를 사용해서
시트의 개수가 1개 이상일 때만 코드를 실행해야 합니다.
그리고 특정 시트를 지우려고 할 때
해당 시트가 존재하는 지 역시 확인해야 합니다.
마지막으로, 특정 시트의 앞 또는 뒤 시트를 지우려고 할 때
해당 시트의 위치가 제일 앞이거나 제일 뒤일 경우에는
조건이 충족하지 않으므로 조건이 충족하는지 여부도 사전에 검토가 되어야 합니다.
시트의 추가와 이동을 알아보시려면 아래를 참고하시면 됩니다.
여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.
'EXCEL VBA' 카테고리의 다른 글
[ 엑셀 VBA ] VBA로 하이퍼링크(Hyperlinks) 추가하기 (0) | 2024.09.06 |
---|---|
[ 엑셀 VBA ] 시트 이동하는 여러가지 방법, 시트 이동하기 (0) | 2024.09.06 |
[ 엑셀 VBA ] 시트 추가하는 여러가지 방법, 엑셀 시트 추가하기 (0) | 2024.09.05 |
[ 엑셀 VBA ] 엑셀 VBA의 Err 객체 : VBA의 에러를 다루기 위한 가이드 (2) | 2024.09.04 |
[ 엑셀 VBA ] 엑셀 VBA의 오류 및 에러 처리 방법 (0) | 2024.09.04 |