Control|Treeview|OLEObject|TreeView|Nodes|Node|
|AutoShapeType|Type|OLEObjects|Shape|Range|
TreeView콘트롤을 이해하면 정보를 이해한다
현재 보고 있는 웹페이지의 왼쪽의 메뉴도 TreeView콘트롤오브젝트이고
엑셀에서 사용할수 있는 외부지원콘트롤(ActiveX콘트롤이라고도 한다)에도
TreeView콘트롤이 있다
TreeView콘트롤은 한참 뒤에 나올 예정이였으나
워크샵참가자님께서..워크샵에 소개되었던 내용이 복잡하고 어려우니
기초적으로 간단한 것으로 다시 설명을 해주었으면 좋겠다고 하셔서..
잠시 새치기를 하였다
아래의 그림과 같이 엑셀시트에 잡아 넣고 자동화시킬수 있는것이다
세상의 모든 것들은 부모/자식,선배/후배,형님/동생..등의 상하
좌우관계를 유지하면서 공존하게 되어 있는 것이다
위의 TreeView는 아래의 밋밋한 워크시트정보(Flat Table)를
기능적으로 정보의 입체적 상하관계(Hierarchy)형태로 옮긴것이다
TreeView라는 단어의 의미대로 정보의 관계를 나무가지를 확장해
나가듯이 전개하는것이다
TreeView라는 정보의 컨셉을 이해하면
정보의 Grouping을 이해하고 SubTotal을 이해하고
피봇테이블을 이해하고 XML화일의 구조를 그냥 알게 되는 것이다
워크시트에 TreeView콘트롤 설치하기
실은 UserForm에서 효율적으로 돌아가지만 필요에 따라서
워크시트에 설치할수 있다
여러분들의 웹싸이트를 돌아다니다 보면 ActiveX를 다운 받겠느냐??
안받겠느냐..다운을 받지 않으면 정상적으로 볼수 없다는
메시지를 많이 볼것이다
ActiveX는 작은 프로그램이다
큰 프로그램에 부속품으로 삽입하여 사용할수 있게 만든것들이다
TreeView나 UserForm의 콘트롤들은 모두 ActiveX콘트롤들인것이다
엑셀의 버전이 다양하여 다른 사람이 사용하도록 배포를 할때
버전의 다양함에 유의하여야 한다
설치 방법은 Calendar콘트롤을 설치하는 요령과 같고
UserForm의 콘트롤들과 역시 같은 요령이다
위와 같이 하여 그린후 상태는 아래와 같고
VB편집기에 가서 도구/참조메뉴에서 참조대화상자를 보면
외부라이브러리하나가 자동으로 추가 참조된것을 볼수 있다
엑셀자체의 도구가 아닌 외부에서 지원받고 있다는 이야기다
TreeView콘트롤에 정보전달
위와 같이 그려 놓아보았자..추가적인 작업을 하지 않으면
먹통이다
아래의 그림같이 그려놓은 위치에서 이상하게 겹쳐지고
영 그림이 얹찮다..
이 상태에서..에이!!!남의 자식 불러다 사용하니까 못쓰겠군!!!
하고 사용을 포기할수도 있다
이상태에서 아래의 구문을 실행시켜보시기 바란다
With ActiveSheet.TreeView1
.Top = 30
.Left = 30
.Style = 7
With .Nodes
.Clear
.Add , , "할아버지", "할아버지"
.Add "할아버지", 4, "아버지", "아버지"
.Add "아버지", 4, "형", "형"
.Add "형", 4, "조카1", "조카1"
.Add "아버지", 4, "누나", "누나"
.Add "누나", 4, "조카2", "조카2"
.Add "아버지", 4, "나", "나"
.Add "나", 4, "아들", "아들"
.Add "나", 4, "딸", "딸"
.Add "아버지", 4, "동생", "동생"
.Add "할아버지", 4, "삼촌", "삼촌"
.Add "할아버지", 4, "고모", "고모"
End With
End With
그러면 아래의 그림과 같이 되는것을 볼수 있다
눈썰미가 있으면 위의 구문을 보면 감이 잡히신 분들도 있을것이다
으흠..Type이라고 하면 TreeView의 모양을 어떤 타입으로 하라는것이니까..
TreeView의 타입이 여러가지 있는 모양이군
디자인모드에서 속성창에서 직접값을 줄수도 있고
실행모드에서 프로그래밍적으로 값을 줄수도 있다는것은
다른 콘트롤들과 똑 같다
Nodes!!!아하..뒤에 S가 붙었으니까..Collection 오브젝트이고
이곳에 Node오브젝트를 줄줄이 붙여나갈수 있겠구나..
그런데 가장 중요한것은 부모와 자식간의 관계만 알려주면
TreeView콘트롤오브젝트가 알아서 처리하겠다는 모양이군..
맞는 소리!!
중요한것은 아래의 그림을 보고 위의 코드를 보시고
이해하시면 된다
다른 오브젝트를 집합체에 만들어 나갈때나 메소드가
비슷하다..
Nodes.Add (필요한 매개변수들...)
세번째 인수는 만들어지는 Node 자신의 Key값이다..
Key값은 절대로 중복되면 안된다는것은 상식이겠고..
데이타베이스의 하나의 행의 Key값이 있듯이
집합체오브젝트는 모두 Key값이 있다는 점 잊지 않으시면 된다
이 값은 주민등록 번호와 같아서 각각의 Node를 인식할수 있는
표시인것이다
아무튼 다른 도형오브젝트 보다 어려울것이 없고
그냥 복잡하고 어려울것 같아 보일뿐이다
아래의 화일에서
- 다른 콘트롤이나 오브젝트들과 어렵다고 할수 있는것은
- 테이블의 정보를 어떻게 찾아서 어떻게 각각의 Node로
- 만드는가 이다
- 결국은 앞의 VBA의 기초와 Range오브젝트의 기본을
- 철저히 안다면 하나도 어려울것이 없다
- 필요한 정보에 해당하는 열을 찾고
- 열을 순환하면서 중복되는 않는 값을 찾아서
- Node오브젝트를 생성하면 되고
- Node오브젝트를 생성하면서 하위정보가 필요하다면
- 다시 하위정보에 해당하는 열을 찾아서
- 해당 열을 또 순환하면서
- 조건에 맞는 값을 찾아서
- 상위Node에 줄줄이 붙여 나가면 된다
- 위의 내용을 구현해보도록 한다
- 사용하는 버전에 따라서 에러가 나는 수도 있을것이니
- 그렇다면 코드는 그대로 두고,TreeView오브젝트를 지워버리고
- 위의 설명대로 해당버전에 맞는 TreeView를 다시 그려 넣는다
Treeview Control
다음 페이지에서는 TreeView콘트롤에 지능을 심어서
테이블의 정보를 분석하는 작업을 하도록 한다
Range오브젝트나 WorkSheet오브젝트들의 기능들은 이렇게
다른 오브젝트들을 살펴보면서 반복하여 나올것이니
꾸준히,중도 포기 없이 잘 진행하시기를...