본문 바로가기

컴퓨터/노트북/인터넷

IT 컴퓨터 기기를 좋아하는 사람들의 모임방

조회 수 283 추천 수 0 댓글 0

단축키

Prev이전 문서

Next다음 문서

수정 삭제

단축키

Prev이전 문서

Next다음 문서

수정 삭제
Extra Form

VBA강좌

Exceller's VBA 입문강좌

최초 작성일 : 2002-11-29
최종 수정일 : 2004-12-03

 

강좌 읽음수 : 163,984회
작성자 : Exceller(권현욱, exceller@amorepacific.com)

강좌 제목 : 애플리케이션, 오브젝트, 프로퍼티 그리고 메서드

도대체 이 나라는... 대통령 뽑을라구 있는 나라인지 허구헌 날 왜 이러나 모르겠습니다. 하지만 '조직은 딱 제 수준에 맞는 우두머리를 가진다'는 Nigel Nicholson의 말이 맞는다면 우리 정치 수준이 이것 밖에 안된다는 의미가 되므로... 씁쓸해 집니다. 누가 당선되든 간에 국민 무서운 줄 뼈저리게 느끼도록 본 때를 보여줘야 할 텐데...


VBA 입문강좌 : 애플리케이션, 오브젝트, 프로퍼티, 그리고 메서드


이제 VBA의 얼굴과는 많이 친해지셨나요? '엉? VBA가 얼굴이 어딨어?' 하는 분이 저기 두어분 계시는군요. ^^ VB Editor, 즉 '도구-매크로-Visual Basic Editor' 메뉴(또는 Alt + F11)를 선택하면 나타나는 화면이 바로 VBA의 얼굴입니다. 이제 첫 인사를 나누었으니 몇 가지 중요한 개념을 정립하고 넘어가도록 합니다.

먼저 애플리케이션 오브젝트의 계보hierarchy 잠깐 눈여겨 보도록 하세요. 엑셀에서도 그러하였지만 VBA를 배우는데 있어 가장 훌륭한 스승은 도움말 입니다. VB Editor 상태에서 도움말을 찾아보면 아래와 같은 계보, 즉 엑셀의 족보가 나타납니다.

딸린 식솔들이 엄청나게 많아 보이십니까? 따지고 보면 그리 많지도 않습니다. 우리가 누구입니까? 학교다닐 때, 그 어렵다는 VOCA 22000, 33000도 모자라 55000도 거뜬히... 책을 한권씩은 산 의지의 한국인들 아닙니까? ^^


애플리케이션(Application)

우리가 지금 배우고 있는 것이 Visual Basic for Application, 즉 특정한 응용 프로그램Application을 위한 VB입니다. 위에서 Application은 Excel이 되는 것입니다. 그런데 VBA 엔진은 엑셀에만 있는 것이 아니고 모든 MS-Office 제품군에 장착이 되어 있습니다. 만약 워드에서 VBA를 사용한다면 Application은 워드가 되고 억세스에서 VBA를 사용한다면 Application은 당연히 억세스가 된다는 얘기입니다. VBA를 잘 모르는 사람들은,

"웬 파일들이 이렇게나 많고 용랑이 커? 비싸기만 하고..."

하겠지요? VBA라는 아주 똘똘한 부하가 언제든 주인의 명령을 내려주기만 기다리고 있다는 사실은 모르고 말입니다. 이런 걸 모르고 하드디스크 자리나 차지하게 방치해 두는 것도 낭비 중의 낭비일 것입니다.

이제 애플리케이션이 무엇인지 감이 좀 오십니까? 당연히(?) 안 오신다구요? 그러시리라 짐작 했습니다. ^^; 쉽게 "엑셀 그 자체가 애플리케이션이다"라고 생각하시면 되겠습니다. 물론 워드라면 "워드 그 자체가 애플리케이션이다"가 되겠지요.


오브젝트(Object, 개체)

컴퓨터를 가만히 살펴보세요. 우선 모니터가 있고 본체가 있고 키보드가 있고... 옆에 마우스도 보이는군요. 본체를 사알~짝 뜯어보면 메인보드가 있고 CPU가 있고 RAM이 있고 비디오 카드 등이 있습니다. 이처럼 컴퓨터는 여러 가지 부품들의 조합으로 이루어져 있습니다. 이 때 컴퓨터라는 총합체가 Application이고 각각의 부품들(모니터, 키보드, CPU 등...)이 오브젝트라고 생각하시면 되겠습니다.

아이들이 가지고 노는 장난감 중에 레고Lego라는 것이 있지요? 여러 가지 형태의 조그만 부속품을 이리 맞추고 저리 끼우고 하여 집도 만들고 성도 만들고 배나 비행기도 만듭니다. 이 때 각각의 장난감 조각이 오브젝트이고 조각이 만들어 낸 집이나 비행기가 Application인 것입니다. 그러고 보니 우리 주변에 보이는 모든 것이 무언가의 조합에 의해 이루어진 것이란 생각이 듭니다. 모든 것이 부품화 되어 있고 부속품을 조립하여 다른 완성품을 만들듯이 프로그래밍에 있어서도 이러한 개념이 도입되었는데 이것을 컴포넌트Component 프로그래밍이라고 부릅니다.

엑셀도 마찬가지 입니다. 엑셀도 수많은 부속품(위의 계보에서 Workbooks, Worksheets, Charts, Windows 등이 모두 여기에 해당됩니다)들이 모여서 만들어진 것입니다. 엑셀에는 이런 오브젝트가 47개가 있습니다(엑셀 2000 기준. 아직 XP는 몇 개인지 세어보지 않았습니다. 누구 세어 보신 분 계시면 좀 알려주세요).

그런데... 모든 것을 부품화 해 놓으면 도대체 어떤 장점이 있는 것일까요? 예를 들어 자동차를 조립하는 회사에서 타이어를 하청 업체로부터 공급받지 않고 직접 제조한다면, 유리창도 하도급 업체에서 받아오는 것이 아니라 자신들이 직접 생산한다면 얼마나 많은 중복되는 생산라인이 필요할 것이며, 얼마나 많은 기술력과 전문가들을 보유하고 있어야 하겠습니까? 아마도 불가능 할 것입니다. 돈만 가지고 있으면 하청업체들로부터 부속품들을 구매해서 조립하고 핵심 역량만 지속적으로 개발해 나가는 것이 훨씬 효율적이겠지요.

Microsoft에서 엑셀을  개발하는 프로그래머들도 엑셀 신 버전을 만들 때에도 모든 것을 만들어 내거나 맨 처음부터 다시 시작하는 것은 아닙니다. 업그레이드 한다는 것은 엑셀의 수많은 부품 중 일부를 보다 나은 부품으로 바꿔 끼우거나 기존에 없던 부품을 새로 꽂는 것을 의미합니다. 이런 방법을 취함으로써 지속적인 개선이 가능한 것입니다.

오브젝트에는 두 가지 종류가 있습니다. 하나는 그냥 오브젝트이고 다른 하나는 컬렉션Collection 오브젝트 입니다. 아파트를 가만히 보면, A 아파트, B 아파트, C 아파트 등은 모두 아파트라는 보다 큰 카테고리에 속해 있습니다. 즉 각각의 아파트는 서로 다른 것이지만 아파트들 이라는  집합체(Collection) 속에 포함되는 것입니다. 자동차 타이어를 다시 예로 들어보면, 자동차에는 4개의 타이어가 있습니다. 각각의 타이어는 모두 오브젝트가 되겠고, 4개의 타이어를 합쳐서 타이어들 이라는 컬렉션(집합체)으로 취급한다는 이야기 입니다. 즉 타이어는 오브젝트인 동시에 컬렉션의 한 구성요소라고 할 수 있습니다.

컬렉션이라는 것은  A group of  objects of the same class, 즉 같은 클래스의 집합체 라고 할 수 있습니다. 짜증이 막 날라구 그러지요?(클래스는 또 뭐야? 학급이란 뜻인가?) 많이 헷갈리시리라 생각됩니다. 위 엑셀 계보도에서 오브젝트 뒤에 s가 붙은 것(예를 들면 Workbooks, Worksheets, Names, Windows,...)은 모두 컬렉션 오브젝트라고 보시면 됩니다. 여러 개가 모여서 하나의 큰 덩어리를 이루고 있는 집합체라고만 알아 두세요. 앞으로 자주 나오게 될 테니까...


프로퍼티(Property, 속성)

프로퍼티를 다른 말... 이라기 보다 우리 말로 속성이라고 합니다. 책을 오브젝트라고 가정한다면 프로퍼티는 그 책의 두께나 크기, 저자, 무게, 가격, 표지 색깔 등 오브젝트가 가진 성질머리라고 할 수 있습니다.

책.두께 = 566 페이지
책.표지색깔 = 빨간색
책.가격 = 20000원
책.저자 = Exceller

이렇게 표현할 수 있을 것입니다. 이제 실제로 코딩은 어떻게 하는지 살펴보도록 하겠습니다. 아래의 코드를 모듈시트에 복사해 넣고 실행시켜 보세요. 모듈시트를 삽입하고 코드를 삽입하는 방법은 지난 시간에 소개 드렸지요?... 잠잠 ... (다시 한번) 드렸지요? 혹여라도 긴가민가 하는 분은 아래 게시물을 다시 한번 살펴보세요. 모든 것은 부단한 반복입니다.

Sub AboutProperty()

    Dim strTemp As String
    strTemp = "안녕하세요 " & Application.UserName & "님!" & vbCr
    strTemp = strTemp & "현재 사용중인 엑셀 버전은 " & Application.Version & "입니다"

    MsgBox strTemp, , "www.iExceller.com"

End Sub

Application.UserName은 엑셀을 설치할 때 입력한 사용자의 이름을, Application.Version은 엑셀의 버전 정보를 알려주는 프로퍼티입니다. 여러분이 사용하고 계신 엑셀의 버전이나 사용자 이름 등에 대한 정보를 누가 갖고 있느냐 하면 바로 Application 오브젝트가 가지고 있습니다.

우리네 실생활에서도 사정은 크게 다르지 않습니다. 창고에 TV가 몇 대 남았는지, 냉장고 재고 상태가 어떤지를 알려면 창고의 재고 담당자에게 물어야지 공장의 생산설비 담당이나 연구소 직원에게 물어서는 곤란하겠지요? 그런 의미에서 VBA로 프로그래밍을 한다는 것은 누가(즉 어느 오브젝트가) 어떤 정보를 가지고 있는 지를 파악해서 일을 시키는 것이라 할 수 있을 것입니다. 그러기 위해서 오브젝트들과 우선 친해져야 하고, 그런 다음 각 오브젝트의 성질머리(프로퍼티)와 행위(메서드)를 파악해 나가는 것입니다.


메서드(Method, 방법)

메서드를 한 마디로 표현하자면... 동사(Verb)라고 할 수 있습니다.

갑돌이가 잠을 잔다
영식이가 달려 간다
만득이가 눈을 깜빡거린다
바둑이가 짖는다
비가 내린다

여기서 갑돌이, 영식이, 만득이 등은 오브젝트입니다. 반면 잠을 잔다, 달려 간다, 눈을 깜빡거린다 처럼 오브젝트에 대한 동작 명령은 메서드방법라고 합니다. 메서드는 오브젝트를 움직이도록 만드는 수단이며 우리말로 방법이라고 번역합니다.

모든 오브젝트는 적어도 한 개 이상의 프로퍼티나 메서드를 가지고 있습니다. 그리고 오브젝트에 명령을 내릴 때, 프로퍼티를 이용할 수도 있고 메서드를 사용할 수도 있습니다.

갑돌이. = True

이렇게 갑돌이의 상태를 프로퍼티로 표현할 수도 있고(오브젝트명.속성명 = 속성값)

갑돌이.잠을잔다

와 같이 메서드로 나타낼 수도 있습니다(오브젝트명.메서드). 두 가지 방법 중 어떤 것을 택할 것인가는 프로그래머가 그때그때 상황에 맞게 선택하여 사용합니다.

아래의 코드를 모듈시트에 붙여 넣고 실행시켜 보세요.
 

Sub ValueProperty()
    Dim i As Integer

    For i = 1 To 20
        Cells(i, 1).Value = "안녕하세요!"
    Next i
End Sub

Sub ClearContentsMethod()

    Dim i As Integer

    For i = 1 To 20
        Cells(i, 1).ClearContents
    Next i

End Sub

어떤 일이 일어났습니까? ValueProperty를 실행시키니까 A1:A20 영역의 셀에 안녕하세요!라는 문자열이 한꺼번에 좌~악 입력되지요? 이것은 Range 오브젝트의 Value 프로퍼티를 이용한 것입니다. Range 오브젝트에 대해서는 다음 강좌 시간에 아주 자세히 다룰 예정입니다.

이번에는 ClearContentsMethod 프로시저를 실행시켜 보세요. A1:A20 영역에 입력되어 있던 값들이 순식간에 어디론가 사라졌습니다. 이것은 역시 Range 오브젝트의 ClearContents 메서드를 사용한 것입니다.

이맘때쯤 되면 무지 헷갈리실 것입니다. Exceller가 위에서 프로퍼티와 메서드는 분명히 다르다고 하니까 그런가 보다 하고 넘어왔는데 어떻게 다른 것인지, 그리고 어떨 때 프로퍼티를 쓰고 또 다른 경우에는 메서드를 사용하는지...

프로퍼티와 메서드는 공히 오브젝트를 움직이게 하는 수단입니다. 차이점이 있다면, 달리게 한다거나 잠을 자게 한다거나 눈을 깜빡이게 한다거나 하는 등 동사적 변화를 주는 것은 메서드, 머리 색깔이나 눈동자 색깔을 묘사하는 것과 같이 형용사적 변화를 주는 것은 프로퍼티라고 생각하시면 되겠습니다.

다음 시간에는 아주 중요한... (그렇다고 오늘 강좌나 지난 강좌가 중요하지 않다는 것은 절대 아님!) Range 오브젝트를 포함한 몇 가지 오브젝트에 대해 살펴보도록 하겠습니다.

어서 빨리 하늘을 날아다니고 싶은데 날으는 기술은 안 가르쳐주고 왜 자꾸 이상한 것만 자꾸 가르쳐 줘요?

이렇게 생각하는 분도 계시리라 생각됩니다. 날기 위해서는 사전에 많은 준비가 필요합니다. 한 송이 국화꽃을 피우기 위해서는 이른 봄부터 소쩍새가 몹시도 시끄럽게 울어야 하듯이 말입니다. 해서... 앞으로도 한동안은 안 날아다닐 겁니다(실은... VBA 배워도 날아다닐 순 없답니다. ^^).


컴퓨터/노트북/인터넷

IT 컴퓨터 기기를 좋아하는 사람들의 모임방

List of Articles
번호 분류 제목 조회 수 날짜
공지 뉴스 구글 최신 뉴스 file 1386 2024.12.12
HOT글 일반 아 진짜 요새 SKT 해킹 뭐시기 때문에 신경 쓰여 죽겠어 ㅠㅠ 2 237 2025.05.20
공지 사랑LOVE 포인트 만렙! 도전 4679 2025.03.19
공지 🚨(뉴비필독) 전체공지 & 포인트안내 2 25851 2024.11.04
공지 URL만 붙여넣으면 끝! 임베드 기능 20432 2025.01.21
10640 일반 Synology의 4 베이 NAS 장비 "DiskStation DS416j" 1458 2016.02.08
10639 일반 태블릿 PC의 충전을하면서 주변 기기를 사용할 수있는 OTG 지원 USB 허브 1436 2016.02.08
10638 일반 카페베네 상장 난항에 투자자 눈물 778 2016.02.15
10637 일반 주식, 욕심은 화를 부르고. 그 화는 고스란히 가족들에게 짜증을 부릴겁니다 792 2016.02.22
10636 일반 원익IPS 추천합니다 678 2016.02.22
10635 일반 장이 너무 안좋네요 ㅜㅜ 709 2016.02.22
10634 일반 주식투자와 관련된 주식명언 1001 2016.02.22
10633 일반 i5-6600 i5-6500 비교 1 1436 2016.02.22
10632 일반 ssd좀봐주세요 2 908 2016.02.27
10631 일반 크라운제과 어떻게 보시나요? 459 2016.02.28
10630 일반 흑자예상하며 기다린보람이 있군 472 2016.02.28
10629 일반 세계 주식 주요 지수 보는곳 입니다.모르시는분들을 위해 647 2016.02.28
10628 일반 한 2월 말쯤 총선테마가 시작될걸로 예상합니다. 564 2016.02.28
10627 일반 대중관계 악화로 중국에서 돈버는 기업들 급락이네요 685 2016.02.28
10626 일반 주식 생초보인데 알려주실수 있으신가요? 516 2016.02.28
10625 일반 11시정도만 잘 넘기면 될거같은데.. 478 2016.02.28
10624 일반 요즘 한종목에 꽂혀서 분할매수하는데요. 565 2016.02.28
10623 일반 본인 명의로 핸드폰 두개 개설 하면 문제 생기나요? 1 1154 2016.03.01
10622 일반 단말기대금 일시불납 가능한가요? 1 781 2016.03.05
10621 일반 노트4 배터리 공유?? 1 1749 2016.03.05
10620 일반 금호타이어 어떻게 보시나요? 650 2016.03.05
10619 일반 해외에서 사용하던 도메인을 구입했는데 헉.. 568 2016.03.09
10618 일반 축구 페널티킥 선방 탑10 469 2016.03.12
10617 일반 SSD의 성능을 유지하기위한 유지 관리 기술 1068 2016.03.15
10616 일반 저렴한 Skylake 버전 Xeon 마더보드 'GA-X150M-PRO ECC」 874 2016.03.15
10615 일반 G5 vs S7 1 626 2016.03.18
10614 일반 스테레오믹스 소리가 안납니다 1 1104 2016.03.19
10613 일반 스피커를 항상 켜 놓는데요. 노이즈??? 소리가 납니다. 1 850 2016.03.19
10612 일반 M2 메모리 추천 1 911 2016.03.19
10611 일반 모니터 단자 HDMI, DP & 오디오 관련 문의 1 865 2016.03.19
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 355 Next
/ 355