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

Shape|AddConnector|GroupItems|ConnectorFormat|BeginConnect|EndConnect|
|BeginConnected|EndConnected|BeginConnectedShape|
|EndConnectedShape|BeginConnectionSite|
|BeginDisConnect|EndDisConnect|RerouteConnection|
|ConnectionSiteCount|EndConnectionSite|AddConnector| |UnGroup|Group|

How To Get Shape In Group/그룹속의 도형에 접근하기

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 오브젝트이다)



아래의 화일에서는 도형과 도형을 연결선으로 연결할때
필요한 속성과 메소드를 코딩해보자

  • 연결선오브젝트를 생성하는 도형오브젝트의 AddConnector메소드
  • 접점에 대한 정보를 처리하는 도형의 ConnectorFormat오브젝트가 있다
  • 시작접점을 만들어주는 BeginConnect메소드
  • 종료접점을 만들어주는 EndConnect메소드
  • 시작접점에 연결도형이 있는지 알아내는 BeginConnected 속성
  • 종료접점에 연결도형이 있는지 알아내는 EndConnected 속성
  • 시작접점에 연결된 도형오브젝트를 돌려주는 BeginConnectedShape 속성
  • 종료접점에 연결된 도형오브젝트를 돌려주는 EndConnectedShape 속성
  • 시작접점이 몇번째 접점에 연결되었는지 알아내는 BeginConnectionSite 속성
  • 종료접점에 몇번째 접점에 연결되었는지 알아내는 EndConnectionSite 속성
  • 시작접점에 연결을 끊어주는 BeginDisConnect 메소드
  • 종료접점에 연결을 끊어주는 EndDisConnect 메소드
  • 도형과 도형사이의 최적의 접점을 찾아주는 RerouteConnection메소드
  • 도형의 가능한 접점의 갯수를 알려주는 ConnectionSiteCount속성


Shapes AddConnector.