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

Excel & VBA---Brain Training




Range오브젝트를 중심으로 VBA를 숙달시키려고 노력하였고
지금의 씨리즈는 Shape오브젝트를 중심으로 VBA를 숙달 시켜나가고 있다
무엇을 익히고 자기의 것으로 만들기 위하여서는 반복이라는 것이 중요하고
반복은 지루하다
영어단어를 외워도 계속 반복하여 그냥 딸딸이 외우는 것 보다는
상황을 바꾸어 가면서 같은 단어를 자주 만나야 자기의 것이 되는 것!!
그런 의미에서 Brain Training코너에 얼떨결에 시작한 초보를 위한 VBA씨리즈는
참으로 잘 시작하였다는 생각이 새삼 든다
특히 차근 차근 한페이지 한페이지를 꾸준히 쫓아오시는 분들이 있어서
더더욱 보람을 느낀다
앞으로 Range오브젝트를 중심으로 Shape오브젝를 중심으로
또 다음에는 또 다른 오브젝트를 중심으로 계속 반복되는 같은 문법의 VBA를
자신도 모르게 여러분의 것이 되어 가게 되기를 바라면서 될수 있는 하루에
몇줄이라도 이야기를 진행 하도록 하면서..

Shape오브젝트는 엑셀의 버전이 올라가면서 섬세해졌다
오래된 버전에서는

Sub addRectangle()
Dim shtX As Worksheet
Set shtX = Worksheets.Add
shtX.Rectangles.Add 10, 10, 100, 100
DoEvents
MsgBox "사각형그렸고 위에 원을 그린다"
shtX.Ovals.Add 10, 10, 100, 100
End Sub

와 같이 도형을 그렸다
지극히 간단했었다
도형이라고 해보았자..선과 원과 사각형밖에 없었다
그때에는 Worksheet오브젝트의 Rectangles라는 사각형만 관리하는 사각형집합체
Ovals라는 원만 관리하는 원집합체가 있었고
이 집합체에 Add메소드로 만들었었다
그러나
다양한 도형을 구현하기 위하여 Shapes오브젝트라는 것이 추가 되었고
구버전에서 표현한 위의 것도 모두 Shapes오브젝트에서 관리하게 되었다
이런 역사를 배경으로..Rectangles나 Ovals는 잊버버리시고
Shapes오브젝트를 따져 나가보도록 하자
뭐가 그렇게 복잡해 졌냐하면...아니 복잡해졌냐??라고 하면 골치아프니까
좀더 섬세해졌냐?? 하면으로 바꾸면 좀 어려워보이지 않을 것이다
도형의 배경자체도 복잡해졌다

Range("A1").Interior.ColorIndex=3

과 같이 엑셀의 셀은 Interior라고 하는 오브젝트가 배경을 관리한다
또한 이전의 버전의 도형에서는

Sub fillColor()
Dim shtX As Worksheet
Set shtX = Worksheets.Add
shtX.Rectangles.Add 10, 10, 100, 100
DoEvents
MsgBox "사각형그렸고 위에 원을 그리고 색을 채운다"
With shtX.Ovals.Add(10, 10, 100, 100)
.Interior.ColorIndex = 3
End With
End Sub

Range오브젝트의 Interior오브젝트를 같이 사용하는 간단한 방법이였다
그러나 Shape오브젝트는
Fill이라는 속성이 준비되어 있다
Fill이라는 단어의 의미는 채우다인....흠..배경에 무엇을 채운다는 것이겠군..
맞다..!!
그런데 Fill은 채우다라는 동사로서가 아니라
동사로 끝나면 메소드라고 하는 것이 맞다
FillFormat이라는 오브젝트를 만들어주는 속성이다
이것이 뭔소린가..
채우는 것을 그냥 새깔만 간단하게 채워서는 섬세한 도형이 되지 않는다
섬세하다는 것은 다양한 정보를 관리하여야 한다는 것이고
다양한 정보를 관리하기 위한 방법으로 오브젝트가 생긴것이고
그래서 FillFormat이라는 오브젝트를 만들게 된 것이다
아래를 실행시키면 도형의 바탕색을 칠하는데..

Sub useFillFormat()
Dim shtX As Worksheet
Dim shpX As Shape
Dim oFill As FillFormat
Set shtX = Worksheets.Add
Set shpX = shtX.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 100)
DoEvents
MsgBox "도형을 그렸다..이제 색을 칠한다"
Set oFill = shpX.Fill
oFill.ForeColor.SchemeColor = 3
End Sub

아래와 같이 FillFormat타입오브젝트 변수를 선언하고

Dim oFill As FillFormat

한다는 것은 Fill이 FillFormat이라는 오브젝트를 만들어주는 속성이라는 것을 보여준다

이것은
shpX.Fill.ForeColor.SchemeColor=3
이라고 해도 된다는 것은 알고 있을 것이다
이렇게 이런 오브젝트..저런 오브젝트들을 섭렵하면서
아하..오브젝트를 만들어주는 속성!!이라는 것을 감각적으로
알게 될때가 올 것이다
이것이 값을 주고 받는 속성이냐..오브젝트를 만들어주는 속성이야??
를 따지면 아직은 여러분의 머리가 프로그래밍을 하는 자동화가
되지 않은 상태다
프로그래밍을 하는 머리의 자동화는
그냥 엑셀을 어떻게 하고 싶다는 생각과 동시에 코딩이 이루어지는 것이고
그렇게 되어야 엑셀프로그래밍의 효과를 볼수 있다
엑셀프로그래밍은 프로그래밍시간을 단축하고 업무의 효율과 생산성을
높이기 위한 것이지 장난이 아니다!!

초보님들은 프로그래밍은 코딩하는 것이 시간이 가장 많이 걸릴것으로 생각한다
절대 아니다..
코딩보다는 어떻게 할까 생각하는 시간이 훨씬 많이 걸린다
예를 들어서 회사의 업무도구를 만든다고 할때
자동화도구를 만드는 코딩을 하는 것은 별로 안걸린다
그러나 어떻게 업무를 할것인지에서 시간을 잡아 먹는 것이다
삼각형을 그릴것인가..사각형을 그릴것인가에서 시간을 잡아 먹는 것이다
대개의 사람들은 삼각형으로 할까..사각형으로 할까..를 구상하는 시간은
작업시간으로 바보같이 생각하지 않는다...

어떻게 할것인가??!!에 더 관심을 갖으셔야 좋은 엑셀프로그래머가 된다

한번 정하면 밀고 가는 지구력도 또한 필요하다
하다가 또 이렇게 바꾸고 싶고 또 저렇게 바꾸고 싶고
그러면 코딩을 접고..더 일에 대한 방향과 생각을 구체적으로 정리한 다음에
자판을 두들겨야 한다

종이와 연필로 충분히 컨셉을 구체화한다음에 자판을 두들기는 것이 효율적이다

그런 생각..잘 정리된 생각을 자판으로 순간 두들겨서 자동화도구를
만드는 것!!!
그러니 차근 차근 하나도 이 씨리즈물을 빼먹지 말고 진행하시기 바란다
의문나는 사항있으면 항상 질문 하시고..!!
알고 넘어가야지 긴가민가하고 넘어가면 힘들어진다

FillFormat오브젝트의 ForeColor속성은 또 ColorFormat오브젝트를 만들어준다
ColorFormat오브젝트의 중요한 속성은 SchemeColor속성과
RGB 속성을 갖고 있어서 다양한 색상을 구현하게 해주는 것이다
ColorFormat오브젝트는 색상을 관리하는 오브젝트이다
아래와 같이 단순히 Interior.Colorindex 속성과는 전혀 다른 다양한 색상을 줄수 있다



RGB속성은 RGB함수의 값을 받는다
RGB함수는
=RGB(빨강색소(RED 256가지),녹색색소(Green 256가지),파랑색소(Blue 256가지))
그러니 조합을 하면 256*256*256=16777216
즉 1에서 부터 16777216개의 색상을 넣게 되는 것이다
물론 이것도 여러분이 사용하는 컴의 비디오색상표현능력이
쫓아가 주어야 가능한것이고
아무튼 엑셀에서는 그렇게 값을 명령하게 된다

또한 FillFormat오브젝트는 OneColorGradient ,TwoColorGradient등등의 메소드도 갖고
있어서 도형의 입체감을 만들어 준다



그외에도 엑셀이 계속 추가 시켜온 오브젝트와 다양한 속성과 메소드는
엑셀은 처음 만들어질때의 스프레드시트라는 회계도구라는
생각과는 먼 다양한 업무의 자동화도구를 만들어 줄수 있게 되는 것이다

BrainTraining_066_2.