Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

VBA

[VBA 입문] 04강. 워크북 개체

권현욱(엑셀러) 2023. 9. 27. 12:00
반응형

들어가며

엑셀의 최상위 개체가 애플리케이션입니다. 엑셀 자체가 바로 애플리케이션이지요. 애플리케이션 개체가 거느리고 있는 부하가 여럿 있는데, 그중에 No. 1인 워크북 개체(Workbook object)라는 믿음직한 녀석이 있습니다. 이번 시간에는 이 듬직한 친구가 어떤 일들을 할 수 있는지 알아보러 떠납니다. 출발~~

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가
이 콘텐츠는 <엑셀 VBA 파워 코딩의 정석>(권현욱 저, 디지털북스 출간)에서 편집, 인용한 것입니다.

워크북 개체

워크북 개체란 엑셀 통합 문서, 즉 엑셀 파일을 뜻합니다. 여러분 PC에 보관된 모든 엑셀 파일은 Workbook 개체입니다. 아래 그림을 잘 살펴 보세요(특히 빨간 네모 상자 안).

(이미지: 아이엑셀러 닷컴)

Application(엑셀 그 자체) 밑에 Workbooks라는 것이 있으며 그 아래에 Workbook 오브젝트가 있죠? 오브젝트명 뒤에 's'가 붙어 있는 것을 'OOO' 오브젝트라고 한다고 바로 지난 시간에 소개해 드렸습니다. 기억 나시는지...? 그렇습니다! 컬렉션 개체(Collection Object: 집합체)라고 합니다. 이해를 돕기 위해 아파트와 자동차 타이어를 예로 들어 드렸었죠.

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

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

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

여기서 DefaultFilePath라는 것은 엑셀 파일을 열 때 사용되는 기본 경로를 의미합니다.


워크북 개체 활용 예제

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

Sub makeWorkbook2()
    Dim iWorkbook As Integer
    Dim i As Integer
    iWorkbook = InputBox("몇 개의 워크북을 만들까요?")

    For i = 1 To iWorkbook
        Workbooks.Add
    Next
    Windows.Arrange xlTiled
End Sub

아직 반복문과 InputBox에 대해 배우지 않았지만 대충 눈치로도 알아챌 만하죠? 만약 사용자가 너무 크거나 작은 값을 넣을 경우에 대비하여 안전장치를 마련하면 좀 더 사용자 친화적인 코드가 됩니다. 

Sub makeWorkbook2_1()
    Dim iWorkbook As Integer
    Dim i As Integer
    Dim sMsg As String

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

    For i = 1 To iWorkbook
        Workbooks.Add
    Next

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

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

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

(이미지: 아이엑셀러 닷컴)

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

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


나가며

워크북 개체의 프로퍼티나 메서드 중에서 실무에서 자주 사용되는 것들은 얼마 되지 않습니다. 워크북 개체를 이해하게 되신 것, 축하합니다.

Excel과 VBA의 모든 것 아이엑셀러 닷컴 · 강사들이 숨겨 놓고 보는 엑셀러TV

반응형