- 최초 작성일: 2002-12-03
- 최종 수정일: 2026-09-30
- 조회수: 16 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: Application.Caller 속성에 대하여
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
Application 오브젝트가 데리고 있는 똘마니 중에 Caller라고 하는 아주 기특한 녀석이 있습니다. 우리 말로 '부른 놈?'... 좀 이상하군요. 그럼 '부른 녀석?'... 역시나 이상하군요. 해서… 그냥 Caller라고 부르도록 하지요.
Application.Caller 속성에 대하여
핵심 요약: Application.Caller 속성
Application.Caller는 프로시저에 연결된 개체의 이름을 알려 줍니다. 이 이름을 이용하면 클릭한 도형이 무엇인지 알아내 하나의 프로시저로 여러 개체를 제어할 수 있습니다.
- 1단계: 워크시트의 도형에 이름을 정의하고 같은 매크로를 연결합니다.
- 2단계: Application.Caller로 클릭한 개체의 이름을 얻습니다.
- 3단계: Ovals나 DrawingObjects에 그 이름을 전달해 색, 크기, 표시 여부를 지정합니다.
Step 1: 개체에 이름 정의하기
우리가 워크시트 상에 어떤 도형을 그리거나 버튼을 하나 만들어 넣었을 경우, 삽입된 도형이나 버튼에 이름을 정의해 줄 수 있습니다.
도형 중 하나를 선택하고 이름 상자를 보면 정의된 이름이 나타납니다.
이름은 개체를 선택하고 '삽입-이름-정의' 메뉴를 선택하여 주거나, 개체를 선택한 다음 '이름 상자'에 바로 이름을 입력하고 Enter 키를 누르면 정의됩니다.
Step 2: Application.Caller가 알려 주는 것
Application 오브젝트의 Caller 속성은 어떤 프로시저에 연결되어 있는 오브젝트의 이름을 알려주는 역할을 합니다.
예제의 각 도형을 클릭하면 해당 개체의 이름이 메시지로 나타납니다. 각 도형에는 아래의 코드가 연결되어 있습니다. 아주 싱겁기 짝이 없습니다.
Sub AppCallerTest()
MsgBox "내 이름은 """ & Application.Caller & """입니다"
End Sub
Step 3: 클릭한 도형의 색 바꾸기
이번에는 원을 클릭할 때마다 원 내부의 색깔이 바뀌도록 해 봅니다.
Sub AppCallerTest1()
ActiveSheet.Ovals(Application.Caller).Interior.ColorIndex = Int(Rnd * 56)
End Sub
역시나 Application.Caller 속성을 이용하였습니다. 만약 Caller 속성을 모르고 있다면 이런 작업이 가능할까요? 물론 가능이야 하겠지만 머리털이 한 웅큼 빠져가며 훨씬 비효율적인 방법을 찾아야 할 것입니다.
Step 4: 그림 크기와 옆 도형 표시 전환하기
조금 더 응용해 보겠습니다. 예제에서는 사진을 클릭할 때마다 사진이 커졌다 작아졌다를 반복하고, 사진 옆의 설명 도형도 나타났다 사라지기를 반복합니다. 이 도형은 삭제하면 코드에서 오류가 납니다.
Sub AppCallerTest2()
Dim objPicture As Object
Set objPicture = ActiveSheet.DrawingObjects("AboutMe")
' 사진에 대한 설명이 담긴 개체를 objPicture라는 오브젝트형 변수에 담고…
With objPicture
.Visible = Not .Visible
' Visible 속성을 사용하여 개체가 번갈아가며 보였다 안보였다 하도록 설정합니다.
If .Visible Then
With ActiveSheet.DrawingObjects(Application.Caller)
' 만약 objPicture 개체가 보인다면 Application.Caller 속성을 이용하여 나를 불러온 녀석(그러니까
' 위의 사진이 되겠지요?)의 크기와 높이를 아래와 같이 설정합니다.
' 그 나머지 부분은 설명이 필요없을 듯…
.Width = 200
.Height = 215
End With
Else
With ActiveSheet.DrawingObjects(Application.Caller)
.Width = 50
.Height = 50
End With
End If
End With
End Sub
설명 도형(AboutMe)의 Visible 속성을 번갈아 바꾸고, 도형이 보이면 Application.Caller로 알아낸 사진의 크기를 크게, 보이지 않으면 작게 지정합니다.
Application.Caller 속성은 아주 중요한 속성이므로 잘 익혀두시고 많이 응용해 보시기 바랍니다. 혹 아직도 '이것을 어디에 써 먹는단 말인가?' 싶은 분들은 전자계산기를 한번 만들어 보시기 바랍니다.
다음 시간에 또…
정리 — Application.Caller 활용 예
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 이름 확인 | MsgBox Application.Caller | 클릭한 개체 이름 표시 |
| 색 바꾸기 | ActiveSheet.Ovals(Application.Caller).Interior.ColorIndex | 원 내부 색 변경 |
| 크기 바꾸기 | DrawingObjects(Application.Caller).Width / .Height | 클릭한 그림 크기 변경 |
| 표시 전환 | .Visible = Not .Visible | 도형 표시/숨김 전환 |
| 개체 이름 정의 | 이름 상자에 이름 입력 | 개체 구분 |
자주 묻는 질문 (FAQ)
Q1. Application.Caller는 무엇을 돌려주나요?
프로시저에 연결되어 있는 개체의 이름입니다. 도형이나 버튼을 클릭해 매크로가 실행되면 그 개체의 이름을 알 수 있습니다.
Q2. 도형의 이름은 어떻게 정의하나요?
개체를 선택하고 이름 상자에 이름을 입력한 다음 Enter 키를 누르거나, 삽입-이름-정의 메뉴를 사용합니다.
Q3. Application.Caller를 어디에 활용하나요?
여러 개체가 하나의 프로시저를 공유해야 하는 경우에 유용하며, 전자계산기의 숫자 버튼 처리가 대표적인 활용 예입니다.
마치며
Application.Caller는 매우 중요한 속성이므로 잘 익혀 두고 다양하게 응용해 보시기 바랍니다.