Chart이야기하다가 쌩뚱맞게 Shape(도형)이야기를 한다 실은 쌩뚱맞은것이 아니고 Chart도 Shape오브젝트가 관리하기도 한다 ActiveSheet.Shapes(1).Select 라고 하면 챠트에 접근한다 그러나 문제는 Shape오브젝트의 속성이나 메소드에는 Chart에 관련된 내용에 접근하는것이 하나도 없다는 점!! 헷갈리기 참 좋은 부분이다 어느 회사에 협력업체들이 많이 있다 협력업체(하나의 오브젝트)에서 파견나온 직원들에 대한 점심,저녁 식권을 총무부에서 관리한다고 치자 총무부나름대로의 오브젝트에 협력업체를 관리할뿐이지 협력업체직원들이 하는 일(메소드,속성)에는 전혀 관계가 없다 그런 일상의 상황과 같은것이 오브젝트들의 관계인것이다 Shapes집합체오브젝트는 시트상의 모든 개체들을 단순히 담아주는 그릇 역활로서 관리하는 것이다 이런것을 감각적으로 모두 이해할때 엑셀은 여러분의 손에 완벽히 들어간다 아무튼 Shape오브젝트를 했다가 Chart오브젝트를 했다가 하더라도 앞뒤로 전부 관련된 오브젝트들이니 이것 했다..저것 했다..한다고 걱정하지 마시기 바란다 맨앞의 VBA문법과 Range오브젝트가 기본이니 그것만 순서대로 끈질기게 하신후 그 다음은 앞뒤가 없다고 생각해도 된다 실은 이런 메일이 있었다 풀고 싶은 문제가 있어서 회원에 가입하고 문제의 해법을 찾기 위하여 샅샅이 웹페이지를 뒤졌지만 없더라..!!! 문제는 아래와 같으니 풀어 주었으면 좋겠다!!! 질문 1. Shape 3개를 그룹으로 묶었습니다. 각 Shape에 text를 변경하는 방법이 궁금합니다. 잘 안되던데 그룹을 다 풀었다가 변경하고 다시 묶어줘야하나요? 질문 2. Shape 3개를 그룹으로 묶은 개체가 두개가 있습니다. 이것을 연결선으로 연결하고 싶습니다. 그룹에는 ConnectionSite가 없기때문에 그룹내에 shape에 연결해줘야 하는데 손으로 연결하면 그룹내에 Shape에 연결이 되지만 코드로 하면 오류가 나네요. 무슨 이야기냐 하면 아래의 그림과 같이 여러개의 도형(Shape오브젝트)를 선택하여 하나의 그룹으로 만들 경우가 많다 그림과 같이 선택하여 그룹처리하면 와 같이 되고 메뉴는 그룹해제메뉴가 활성화되어 크릭하면 다시 그룹이 풀리게 된다 이것을 프로그래밍적으로 처리한다면 ActiveSheet.Shapes.Range(Array("도형1이름","도형2이름","도형3이름")).Group 와 같다 이제 원하는것은 이렇게 그룹이 된상태에서 그룹내부의 각 도형에 접근하고 싶은것이다 프로그래밍을 배웠다면 그냥 그룹을 해제하고 해당 도형에 접근하고 일을 시킨후 다시 그룹으로 묶는다!!! 라고 생각하면 되겠다 아래의 그림과 같이 그룹내의 도형에 텍스트를 바꿔주고, 그룹내의 도형과 도형을 연결선 오브젝트로 새롭게 연결한다 A B 그룹이 된 상태에서 각도형에 접근하는것은 아래와 같다
Dim shpX As Shape Dim sShp as String sShp="그룹된_도형이름" For Each shpX In ActiveSheet.Shapes(sShp).GroupItems MsgBox shpX.Name Next
와 같이 하면 각개체의 이름을 얻어낸다 그러나 접근한 도형에 다른 작업을 시도하면 에러가 난다 그러니 그룹을 만들었다,풀었다 하는 방법을 택하면 되는것이다 다음은 도형과 도형의 연결선오브젝트(이것도 역시 Shape 오브젝트이다) 아래의 화일에서는 도형과 도형을 연결선으로 연결할때 필요한 속성과 메소드를 코딩해보자
Shapes AddConnector.