배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   에러
제목:   [팁#12] 에러도 자원이다
     
 

New Page 2
  STEP> 살펴보기


프로그래밍을 하면서 에러를 만나는 것은 반가운 일은 아닙니다. 완성되었다 싶어 자신만만하게 공개했는데, 여기 저기서 에러가 났다고 하면 창피해서 벌개진 얼굴로 고치느라 정신이 없죠.

그러나 에러는 잘 이용하면 코딩을 간결하게 만들 수 있습니다. 다음은 현재통합문서 내 원하는 워크시트가 존재하는 지 알아보는 예입니다.

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