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

Parent Object|Application|Parent|Address|Worksheets|Range|Count|

편리한 Parent속성(상위오브젝트에 접근시킨다)

엑셀에서 가장 높은 오브젝트는 Application오브젝트이다
그래서 Application오브젝트는 부모가 없다
그러나 다른 오브젝트들은 모두 부모가 있다
Application오브젝트에도 Parent속성이 있기는 있으나
자신에게 접근할뿐..더이상 상위오브젝트는 없다
직접실행창에


?Range("A1").Parent.Name

을 입력하고 엔터키를 쳐보면 해당 Range오브젝트가 들어있는
부모오브젝트인 Worksheet오브젝트의 이름을 얻는다
실은 Parent오브젝트가 아니고 Parent속성이다
Application오브젝트를 제외하고는 모든 오브젝트는 Parent속성이 있다
이 속성은 상위오브젝트에 접근하도록 해주는것이다
이번에는

?Range("A1").Parent.Parent.Name

을 입력하고 엔터키를 치면
통합문서의 이름을 얻을것이다
워크시트를 갖고 있는 부모오브젝트는 통합문서(Workbook)오브젝트이니까..
또 이번에는

?Range("A1").Parent.Parent.Parent.Name

를 치면 더 이상 올라갈곳이 없는 Application오브젝트의 이름인
Microsoft Excel
이라는 이름을 얻게 된다
만약 아래와 같이 하였다면

?Range("A1").Parent.Parent.Parent.Parent.Name

에러가 날것이다



족보에 없는 것을 찾으면 당연히 에러가 나는것이다
또한 Range오브젝트도 Name속성이 있을까??
생각하고

?Range("A1").Name

를 직접실행창에 입력하고 엔터키를 쳤다며 어떻게 될까??
당연히 에러가 난다!!
Range오브젝트는 Name속성대신에 Address속성을 갖고 있다
Range오브젝트는 범위의 주소로서 접근하는것이니까..
엑셀의 수식에서 수도 없이 사용하였던 주소값을 얻는것이다
아마도 엑셀을 잘 사용하시는 분은 이렇게 질문할것이다
그렇다면 Range("A1")에 이름을 지어 주었었다면 그 이름을
얻을수 있지 않을까요???
이렇게 범위에 이름을 지어 주었었다면

?Range("A1").Name.Name

이부분은 Range오브젝트에서 다시 설명하도록 한다
과 같이 Name속성을 한번 더 사용하면 얻을 수있다

Parent속성을 잘 응용해야 위,아래로 잘 찾아 다닌다

엑셀프로그래밍은 오브젝트를 요리 조리 찾아다니면서
일을 시키는것이기 때문에 아래쪽으로만 찾아내려가면
융통성이 없다..
밑에서 위로 위에서 옆으로 옆에서 아래로 이런 식으로
찾아 다니면서 일을 시키면 되는것이다
이런 경우는 없겠지만
첫번째시트의 Range("A1")에 값을 넣고 여기에서 마지막시트의
Range("A1")에 또 값을 넣고 싶다면

Worksheets(1).Range("A1").Parent.Parent.Worksheets(Worksheets.Count).Range("A1")=33

위의 경우는 워크시트가 여러장있을때
첫번째시트의 Range("A1")에서 부모(Worksheet)에 부모(Workbook)을
찾아서 맨마지막시트의 Range("A1")을 찾아간것이다