Exceller Home > VBA 강좌 > VBA 입문강좌

Exceller's VBA 입문강좌

최초 작성일 : 2002-12-20
최종 수정일 : 2004-12-03
강좌 읽음수 : 131,571회
작성자 : Exceller(권현욱, exceller@amorepacific.com)

강좌 제목 : 워크북 오브젝트

강좌 제목을 바꾸어 달아야 할까 봅니다. VBA 입문강좌에서 VBA 뜨문뜨문 강좌로 말입니다. ^^; 이제 대통령 선거도 끝이 났습니다. 수많은 公約이 空約이 되지 않도록 두 눈 부릅뜨고 지켜볼 일입니다. @.@


VBA 입문강좌 : 중요한 오브젝트 몇 가지


가. 워크북 오브젝트(Workbook Object)

나. 워크시트 오브젝트(Worksheet Object)

다. 레인지 오브젝트(Range Object)


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


워크북 오브젝트(Workbook Object)

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

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

컬렉션이라는 것은... a group of objects of the same class 즉 같은 성격을 가진 클래스의 집합체입니다(짜증이 날라구 그러지요? 클래스는 또 뭐야? 학급이란 것인가?). 클래스란 것은 나중에 가면 다시 상세히 설명드릴 기회가 있을 것으로 생각됩니다만, 여러분이 Excel.exe 파일을 클릭하는 순간 Book1.xls 라는 워크북 오브젝트가 생성됩니다. 이것은 바로 Excel.exe가 가지고 있는 Workbook Class에 의해 새로운 워크북 오브젝트가 생성되는 것입니다. Class는 쉽게... 붕어빵 장수가 붕어빵을 구워낼 때 쓰는 빵 틀과 비슷한 것입니다. 붕어빵 장수가 붕어빵을 어떻게 만들어 냅니까? 쇠로 된 빵 틀에다가 밀가루 반죽과 팥 고물을 넣고 뚜껑을 덮은 다음 구워내기만 하면 같은 모양의 붕어빵을 얼마든지 만들어 낼 수가 있지요? 이 때 클래스는 빵 틀이고 오브젝트는 붕어빵 이라고 할 수 있을 것입니다.

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

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

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

'百聞이 不如一見이요 百見이 不如一打(혹자는 백타가 불여一作이라고도 하더군요)'이므로... 아래의 코드를 모듈시트에 삽입한 다음, 실행-매크로 실행 메뉴를 선택해 보세요.

Sub MakeWorkbook()

    Workbooks.Add

End Sub

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

Sub MakeWorkbook()

    Workbooks.Add

    ActiveWorkbook.SaveAs Filename:=Application.DefaultFilePath & "\Temp.xls"

End Sub

여기서 DefaultFilePath라는 것은 파일을 파일을 열 때 사용되는 기본 경로를 의미합니다. 도구-옵션 메뉴의 일반 탭을 선택해 보면 기본 파일 위치라는 항목에서 지정해 준 경로를 의미합니다.

이제 조금 더 응용을 해 보도록 합시다. 즉 그냥 통합 문서만 하나 덜렁 만드는 것이 아니라 몇 개를 만들 것인지 사용자가 입력을 할 수 있도록 하고, 또 만들어진 통합 문서들을 바둑판식으로 배열되도록 해 봅니다.

Sub MakeWorkbook()

    Dim wrkWorkbook As Workbook
    Dim intWorkbook As Integer
    Dim intCount As Integer
    Dim Msg As String
    On Error GoTo ET

    intWorkbook = InputBox("몇 개의 워크북을 만들까요?", "www.iExceller.com")
    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, , "www.iExceller.com"
 

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

End Sub

위의 코드를 보신 초보님들 중에, '뭐가 이런 복잡한 것이 다 있나?' 하고 지레 겁먹지 않으셔도 됩니다. 코드는 나중에 자연스레 이해하시게 될 것이므로... (정말입니다), 여기서는 코드를 모듈시트에 붙여 넣고 실행해 보는 것, 그리고 실제로 작동되는 것을 직접 눈으로 확인해 보는 과정 자체가 중요한 것이니까요.

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

'어라? 분명히 5를 입력했으면 다섯개의 워크북이 만들어져야지 왜 여섯개야?' 하는 분이 계실까요? 이 시점에서 초등학교 때 배운 '소풍가는 아기 돼지 이야기'가 불현듯 생각나는군요. 돼지들이 소풍을 가서 인원 점검을 했는데 자기는 빼고 카운팅을 해서 밤새 돌아오지 못했대나 어쨌대나... ^^

이번 시간 강좌에서 중요한 것은, 우리가 엑셀을 실행한 다음, 파일을 추가하고 이름을 변경하고 하는 등의 작업을 하기 위해서는 Workbook Object 에 접근을 하지 않고서는 불가능하다는 것입니다. 우리가 돈을 빌릴 때에도 돈을 가진 사람이 누군지를 알아야 가서 사정을 하든 협박(?)을 하든 해도 하겠지요?

다음 시간에는 Worksheet Object에 대해 알아보도록 하겠습니다.

 

Previous

Next

Creative Commons License