• 최초 작성일: 2002-12-20
  • 최종 수정일: 2022-07-10
  • 조회수: 158,204 회
  • 작성자: 엑셀러 권현욱
  • 강의 제목: 워크북 개체 ㅡ Workbook Object

엑셀러 권현욱

들어가기 전에

강의 제목을 바꾸어 달아야 할까 봅니다. VBA 입문 강의에서 VBA 뜨문뜨문 강의로 말입니다(^^). 하지만 처음 VBA 입문 강의를 시작할 때 '아주 가끔 업데이트' 될 수 있음을 예고(?)해 드렸으므로 양해해 주시리라 믿습니다.

이제 대통령 선거도 끝이 났습니다. 수 많은 '公約'이 '空約'으로 끝나지 않도록 두 눈 부릅뜨고 지켜볼 일입니다.



지난 시간에 소개해 드린 바와 같이 엑셀의 오브젝트 중 가장 두목 오브젝트가 애플리케이션 Application입니다. 엑셀 그 자체가 바로 애플리케이션입니다. 애플리케이션 오브젝트가 거느리고 있는 부하가 여럿 있는데 그 중에 워크북 오브젝트 Workbook Object라는 믿음직한 녀석이 있습니다.

워크북 개체 (Workbook Object)

워크북 오브젝트란 엑셀 통합 문서, 즉 엑셀 파일을 의미합니다. 여러분 PC에 보관된 모든 엑셀 파일은 Workbook 오브젝트입니다. 아래 그림을 잘 들여다 보세요.

BASIC

Application(엑셀 그 자체) 밑에 Workbooks라는 것이 있으며 그 아래에 Workbook 오브젝트가 있지요? 오브젝트명 뒤에 s가 붙어 있는 것을 컬렉션 오브젝트 Collection Object, 집합체라고 합니다. 쉬운 예로 자동차 타이어를 생각해 보면, 자동차에는 4개의 타이어가 있습니다. 이 때 각각의 타이어는 모두 하나의 오브젝트가 되겠고, 4개의 타이어를 합쳐서 타이어들이라는 컬렉션으로 취급한다는 얘기입니다. 즉 타이어는 오브젝트인 동시에 컬렉션이기도 하다는 것이지요.

컬렉션은 a group of objects of the same class, 즉 같은 성격을 가진 클래스의 집합체입니다(짜증이 날라구 그러지요? 클래스는 또 뭐야? 학급이란 것인가?). 클래스는 지난 강의에서도 언급했고, 나중에 가면 또 소개할 기회가 있겠습니다만, 여러분이 Excel 아이콘(Excel.exe)을 클릭하는 순간 Book1.xls 라는 워크북 오브젝트가 생성됩니다. 이것은 Excel.exe가 가지고 있는 Workbook Class에 의해 새로운 워크북 오브젝트가 생성되는 것입니다.

Class는 붕어빵 장수가 붕어빵을 구워낼 때 쓰는 빵 틀과 비슷한 개념입니다. 붕어빵 장수가 붕어빵을 어떻게 만들어 냅니까? 쇠로 된 빵 틀에다가 밀가루 반죽과 팥 고물을 넣고 뚜껑을 덮은 다음 구워내기만 하면 같은 모양의 붕어빵을 얼마든지 만들어 낼 수 있지요? 이 때 '클래스'는 '빵 틀'이고 '오브젝트'는 '붕어빵'이라고 이해하시기 바랍니다.

이걸 좀 유식(?)하게 표현하면, 오브젝트는 클래스에 의해 만들어진 생성물 Instance이고, 클래스는 오브젝트를 만들어 내는 템플릿 Template이라고 할 수 있습니다.

지난 시간에 살펴본 EXCEL 집안 족보(계보도)를 떠올려 보세요. Workbooks, Worksheets, Windows, Charts 등과 같이 오브젝트명 뒤에 s가 붙는 것들이 있었지요? 이것은 같은 성격을 가진 오브젝트가 여럿 존재할 경우 이것을 그룹으로 보아 하나의 집합체 Collection로 간주한다는 뜻입니다.

어느 회사 총무팀에 담당자가 여럿 있는데 그 중에서 한 사람을 지칭할 때, 총무부(제일 고참), 총무부(김담당), 총무부(이담당) 이런 식으로 표현할 수가 있겠지요? 컬렉션 중에서 특정 오브젝트를 지칭할 때에도 Worksheets("Sheet1") 또는 Worksheets(1) 이런 식으로 표현할 수 있습니다.

'百聞이 不如一見이요 百見이 不如一打며, 百打가 不如一作이라죠? 아래 코드를 모듈에 붙여넣은 다음, 실행시켜 보세요. 커서를 프로시저 내부에 둔 상태에서 1) [실행] - [Sub/사용자 정의 폼 실행] 메뉴를 이용하거나 2) 표준 도구 모음에 있는 [Sub/사용자 정의 폼 실행] 아이콘을 클릭하거나 3) F5 키를 누르면 됩니다.

Sub MakeWorkbook()
    Workbooks.Add
End Sub

CODE

어떤 일이 생겼나요? 새로운 통합 문서가 하나 만들어졌을 겁니다. 이번에는 새로 만들어진 통합 문서를 Temp.xls라는 이름으로 저장까지 되도록 해 볼까요?

Sub MakeWorkbook()
    Workbooks.Add
    ActiveWorkbook.SaveAs Filename:=Application.DefaultFilePath & "\Temp.xls"
End Sub

CODE

여기서 DefaultFilePath라는 것은 엑셀 파일을 열 때 사용되는 기본 경로를 의미합니다. 이제 조금 더 응용을 해 보도록 합시다. 그냥 통합 문서만 하나 덜렁 만드는 것이 아니라 몇 개를 만들 것인지 사용자로부터 입력을 받고, 또 만들어진 통합 문서들을 바둑판식으로 배열되도록 해 봅니다.

Sub MakeWorkbook2()
    Dim wrkWorkbook As Workbook
    Dim intWorkbook As Integer
    Dim intCount As Integer
    Dim Msg As String
    On Error GoTo ET

    intWorkbook = InputBox("몇 개의 워크북을 만들까요?")
    If intWorkbook < 1 Then intWorkbook = 1
    If intWorkbook > 10 Then intWorkbook = 10

    For intCount = 1 To intWorkbook
        Workbooks.Add
    Next intCount

    Windows.Arrange xlTiled
    Msg = Msg & intWorkbook & "개의 워크북이 순식간에 만들어졌지요?"
    MsgBox Msg

ET:
    If Err.Number <> 0 Then
        MsgBox Err.Description, , "오류 번호 : " & Err.Number
        Err.Clear
    End If
End Sub

CODE

VBA를 처음 접하는 분이라면, '뭐가 이런 복잡한 것이 다 있나?' 하고 겁이 날 수도 있습니다. 하지만 이런 코드는 조금만 지나면 자연스레 이해하게 됩니다(정말입니다). 여기서는 코드를 모듈에 붙여 넣고 실행해 보는 것, 그리고 실제로 작동되는 것을 직접 눈으로 확인해 보는 과정 자체가 중요합니다.

위의 코드를 실행하고 InputBox에 5라는 값을 넣었다면 아래와 같은 결과가 나타납니다.

BASIC

MakeWorkbook2 프로시저 실행 결과

'어라? InputBox에 5를 입력했으면 다섯 개의 워크북이 만들어져야지 왜 여섯 개야?'

하는 분이 계실까요? 이 시점에서 초등학교 때 배운 '소풍가는 아기 돼지 이야기'가 불현듯 떠오릅니다. 돼지들이 소풍을 가서 인원 점검을 했는데 자기는 빼고 카운팅을 하는 바람에 밤새 돌아오지 못했대나 어쨌대나.(^^)