Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Understanding Object |Worksheets|Range|Cells|Value|Font|
|Size|Name|Method|Shapse|AddShape|
|Event Procedure|SelectionChange

정보를 체계적으로 관리하는 하나의 방법

엑셀은 모두 오브젝트로 이루어졌다고 하는데..
과연 무슨 소린가??
처음에 이야기하였듯이 컴퓨터 프로그래밍은
정보를 다루는것이라고 했다
정보를 다루다 보니 좀더 체계적으로
관리하고 싶은 생각이 들게 된다
그래서 만들어진 것이 오브젝트라는 개념인것이다
그리고 정보라고 하는것이 변수 몇개에 간단하게
처리해도 되는것도 있겠지만 실제로는 그렇지 않다
복잡하기 짝이 없게 정보가 널려 있다

엑셀의 화면을 볼때..
화면의 내용이 그림으로 어디에 보관되어 있는 것이 아니다
엑셀뿐만이 아니라 여러분의 컴퓨터에 아름다운 그림..아름다운 음악
아름다운 색상,아름다운 도형들..그리고 글자들..숫자들..
이 모든것이 여러분의 눈에 보이는 모양대로 저장이 되어있는것이 아닌것이다
어떤정보이던지 숫자값으로 변환되어 어딘가에 보관되어 있는것이다
그것도 최종적으로 모두 0과 1의 두숫자로 변환되어 보관되어 있는것이다
기계가 인식할수 있는 두개의 숫자가 천문학적으로 표현되어 있는 것이다
물론 우리는 ..특히 엑셀프로그래밍을 하려고 하는 사람들은 그런 복잡한
기계가 인식하는 숫자를 이해할 필요가 없다
VB와 엑셀이 알아서 해주는 것이니까..

그러면 우리는 무엇을 알아야 하나..
정보는 각양각색의 성격을 갖고 있다
하나의 색상을 표시하는 방법을 생각해 보자
투명도를 조절하고 싶은데 투명도 값을 얼마로 할까??


투명도를 표현하는것도 값이 필요하고
색상을 표현하는것도 값이 필요하고
작은 하나..하나 모두가 값이 필요한것이다

또 도형의 외곽선을 그릴때도
선의 굵기를 얼마로 하고 싶은데..굵기값을 얼마로 할까??
선의 타입을 쇄선으로 할까..아니면 점선으로 할까..타입값은 무엇으로 할까??

워크시트의 하나의 셀에도
문자체의 이름값을 무엇으로 할까??
문자체의 사이즈를 정하고 싶은데 문자체사이즈 값을 얼마로 할까??
문자체의 색상을 정하고 싶은데 색상의 값은 얼마로 할까??
이 모든것이 정보로 이루어져있는것이다
오브젝트가 없다면 이 많은 정보를 한꺼번에 널어 놓고 쓴다고 하면
관리가 가능하겠는가???끔찍한 이야기인것이다
그래서 같은 성격,기능의 정보끼리 뭉텅이로 관리를 하고 싶은 생각이
자연스럽게 생기게 되는것이고
그것이 바로 오브젝트인것이고
그런 오브젝트를 중심으로 프로그래밍을 만든것을
OOP(Object Oriented Programming)라고도 한다

오브젝트는 체계적인 계통(Hierarchy)을 유지한다

아래의 그림과 같은 형식으로 부모자식간의 관계를 공고히 유지하고 있다
이말의 의미는 이름이 "MySheet"라는 워크시트의 첫번째셀에 접근하려면
Worksheets("MySheet").Range("A1") 혹은
Worksheets("MySheet").Cells(1)
등과 같이 높은 오브젝트순서대로 Dot(.) 연산자를 찍고 사용한다
아래의 그림은 오브젝트족보중 아주 일부만 예를 들어 본것이다



오브젝트에 접근한다고 하는것은
오브젝트의 속성에 값을 주거나 오브젝트의 메소드에 일을 시키기 위하여
반드시 선행되어야 할 작업인것이다

MySheet라는 이름의 시트의 A3을 주소로 하는 셀에 "쌤플"이라는 정보를 입력하고
문자체를 "바탕체"로 하고 색상을 빨강색으로 하고 문자의 크기를 12로
하고 싶다고 한다면
여러분들은 A3셀을 선택하고 자판을 두들겨서 "쌤플"이라고 입력하고
셀서식을 통하여 문자의 색상과 크기를 선택할수 있을것이다
이것을 VB로 엑셀에게 지시를 하고 싶다면

Worksheets("MySheet").Range("A3").Value="쌤플"
Worksheets("MySheet").Range("A3").Font.Size=12
Worksheets("MySheet").Range("A3").Font.Name="바탕체"

또한 위의 구문은 With~End With브록구문으로 간단하게 아래와 같이 처리한다

With Worksheets("MySheet").Range("A3")
    .Value="쌤플"
    .Font.Size=12
    .Font.Name="바탕체"
End With

로 처리하면 구문이 간략해진다
부모오브젝트에서 부터 최종목적하는 오브젝트까지
체계적으로 내려 가서 도달하는것이다

오브젝트는 정보를 보관도 하지만 스스로 일도 한다

오브젝트라는 개념을 만들어낸 사람들은 좀더 생각을 했다
아주 스마트한 생각을 한것이다
이왕에 오브젝트가 정보를 체계적으로 관리할수 있도록 한다면
스스로 무언가 일을 할수 있는 지능을 달아주면 어떨까??
라는 생각을 한것이다
그래서 만들어진것이 메소드(Method)인것이다
오브젝트에 프로시져(Procedure)를 갖고 있도록 한것이다
오브젝트가 갖고 있는 프로시져가 메소드(Method)인것이다

Worksheets.Add
통합문서에 워크시트가 한장 삽입되는 동작을 하고
Worksheets("시트이름").Shapes.AddShape( 도형타입,X위치,Y위치,폭,높이)
라고 하면 정해진 도형타입에 의하여 도형이 그려지는
동작을 하게 되는것이다

오브젝트의 형용사적 처리는 속성이 하고
오브젝트의 동사적 처리는 메소드가 하는것이라고 보면 이해가 쉬울것이다

어떤 오브젝트는 이벤트가 발생될때 이벤트프로시져를 제공한다

WorkSheet오브젝트나 WorkBook오브젝트등은 어떤 속성이나 메소드로
오브젝트에 변화가 생기는 순간..
해당 오브젝트에 이벤트프로시져(Event Procedure)를
제공해준다
현대의 모든 컴퓨터 프로그램은 이벤트라는것을 발생시키고
발생된 이벤트에 따라서 다른 이벤트를 발생시키는것이다
여러분이 셀을 오른쪽마우스로 크릭할때..전자적으로 신호가 발생되고
이 순간을 잡아서 다음 동작을 하게 하는것이다
아래의 셀에 마우스를 움직여 보시기 바란다

ABCDEFGH
1
2
3


위에서 마우스를 움직일때 발생하는 onmouseover이벤트프로시져와
마우스가 영역을 벗어날때 발생하는 onmouseout이벤트프로시져에
하고 싶은 작업을 시킨것이다
마찬가지로 엑셀의 오브젝트에서도 이런 이벤트프로시져를 제공하는것이다
엑셀의 Worksheet오브젝트에는 마우스를 움직일때 발생하는
이벤트프로시져는 없으나
(실은 엑셀의 용도상 이런 이벤트프로시져는 필요없는것이기도 하다)
셀을 선택하거나
셀의 내용을 바꿀때 이벤트프로시져를 제공해준다
그런 것을 활용하면 되는것이다
웹브라우져에서 제공하는 이벤트프로시져에
WorkSheet오브젝트는 SelectionChange이벤트프로시져를 제공한다
아래 테이블의 각각의 셀을 선택해보시기 바란다

ABCDEFGH
1
2
3



이 이벤트는 WorkSheet오브젝트의 셀이나 셀들을 선택할때
발생하는 이벤트로서 이때 제공되는 이벤트프로시져에
개발자가 하고 싶은 일을 작성하여 넣으면 사용자가 셀이나
셀들(즉 Range오브젝트)을 선택할때마다 개발자가 작성한
구문들이 실행되는것이다
아래의 화일에 이벤트프로시져의 응용에 대한 것이 약간 들어있다
아직 이해못해도 괞찮다
무엇을 하는 것인지 감만 잡으면 된다


Some Sample Of Event Procedure

오브젝트는 이렇게 속성을 통하여 정보를 저장하고
메소드를 통하여 어떤 작업을 수행하고
이벤트프로시져를 통하여 다양한 작업을 수행할수있도록 도와준다
이제 어느 정도 오브젝트의 감을 잡고 다음 페이지로 가보자
완전히 감을 잡었다고는 절대 생각하지 않는다
우노도 처음 접할때..한없이 헤맸으니까..!!