프로그래밍을 하면서 에러를 만나는 것은 반가운 일은 아닙니다. 완성되었다 싶어 자신만만하게 공개했는데,
여기 저기서 에러가 났다고 하면 창피해서 벌개진 얼굴로 고치느라 정신이 없죠.
그러나 에러는 잘 이용하면 코딩을 간결하게 만들 수 있습니다. 다음은 현재통합문서 내 원하는 워크시트가
존재하는 지 알아보는 예입니다.
Function SheetExists(SheetName
As String) As Boolean
Dim sht As Worksheet
For Each sht In
ActiveWorkbook.Sheets
If sht.Name = SheetName Then
SheetExists = True
Exit For
End If
Next
End Function |
위의 코드에서는
Worksheet개체와 Sheets 컬렉션 개체를 이용하여 현재통합문서내 Sheets를 순환하면서
시트이름을 얻어 옵니다. 그래서 시트이름과 매개변수인 SheetName변수가 같다면 루프를 중단하고
True값을 돌려줍니다.
위의 코드가 잘못된 것은
아니지만 에러를 이용하면 위의 코드를 간결하게 만들 수 있습니다. 가령
다음의 코드를 보면 sht라는 Worksheet개체에 SheetName매개변수에 있는 이름을 가진
워크시트를 지정합니다.
Set sht =
ActiveWorkbook.Worksheets(SheetName)
그러나 해당 시트가 없다면
다음과 같은 런타임 에러가 발생합니다.
그리고 sht개체변수는
Nothing상태입니다. 그러나 sht가 Nothing이 아니라면 해당 워크시트가 존재한다는 의미이죠.
그러므로 에러를 이용하면 다음과 같습니다.
Function SheetExists(SheetName As String) As Boolean
Dim sht As Worksheet
On Error Resume Next
Set sht = ActiveWorkbook.Worksheets(SheetName)
If Not sht Is Nothing Then SheetExists = True
End Function |
또는 다음과 같이 작성할 수도 있습니다.
Function SheetExists(SheetName
As String) As Boolean
On Error GoTo NoSuchSheet
If Len(Sheets(SheetName).Name) > 0 Then
SheetExists = True
Exit Function
End If
NoSuchSheet:
End Function |
|