엑셀 VBA에서 Shape 개체는 도형, 이미지, 텍스트 상자, 버튼 등을 조작할 때 사용됩니다.
Shapes 컬렉션을 사용하면 워크시트에 있는 모든 개체(Shape)를 관리할 수 있습니다.
1. Shape 개체 접근 방법
✅ 특정 도형(Shape) 접근
Dim shp As Shape
Set shp = ActiveSheet.Shapes("도형이름")
|
📌 "도형이름"은 수동으로 지정하거나 VBA로 가져올 수 있음.
✅ 모든 도형(Shapes) 접근
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print shp.Name ' 도형 이름 출력
Next shp
|
📌 현재 시트에 있는 모든 도형을 순회하며 이름 출력.
2. Shape 개체의 주요 속성 (Properties)
속성
|
설명
|
예제
|
Name
|
도형 이름 반환 또는 변경
|
shp.Name = "새도형"
|
Height
|
높이 설정
|
shp.Height = 50
|
Width
|
너비 설정
|
shp.Width = 100
|
Top
|
Y축 위치 설정
|
shp.Top = 10
|
Left
|
X축 위치 설정
|
shp.Left = 20
|
TextFrame.TextRange.Text
|
도형 내 텍스트 변경
|
shp.TextFrame.TextRange.Text = "Hello"
|
Fill.ForeColor.RGB
|
도형 배경 색 변경
|
shp.Fill.ForeColor.RGB = RGB(255,0,0) (빨강)
|
Line.ForeColor.RGB
|
테두리 색 변경
|
shp.Line.ForeColor.RGB = RGB(0,0,255) (파랑)
|
Visible
|
도형 숨기기/표시
|
shp.Visible = msoFalse (숨김)
|
3. Shape 개체의 주요 메서드 (Methods)
메서드
|
설명
|
예제
|
Select
|
도형 선택
|
shp.Select
|
Delete
|
도형 삭제
|
shp.Delete
|
Copy
|
도형 복사
|
shp.Copy
|
Cut
|
도형 잘라내기
|
shp.Cut
|
ZOrder
|
도형 정렬 순서 변경
|
shp.ZOrder msoBringToFront
|
Duplicate
|
도형 복제
|
shp.Duplicate.Select
|
4. Shape 개체 활용 예제
📌 1) 도형 추가 (사각형)
Sub 도형_추가()
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 100, 50)
shp.Name = "사각형1"
shp.TextFrame.TextRange.Text = "버튼"
shp.Fill.ForeColor.RGB = RGB(0, 255, 0) ' 초록색
End Sub
|
📌 사각형을 추가하고 "버튼" 텍스트를 삽입
📌 2) 특정 도형 찾기 & 색상 변경
Sub 도형_색변경()
Dim shp As Shape
Set shp = ActiveSheet.Shapes("사각형1")
shp.Fill.ForeColor.RGB = RGB(255, 0, 0) ' 빨간색으로 변경
End Sub
|
📌 3) 특정 도형 이동
Sub 도형_이동()
Dim shp As Shape
Set shp = ActiveSheet.Shapes("사각형1")
shp.Top = 100 ' 아래로 이동
shp.Left = 200 ' 오른쪽으로 이동
End Sub
|
📌 4) 도형 크기 변경
Sub 도형_크기변경()
Dim shp As Shape
Set shp = ActiveSheet.Shapes("사각형1")
shp.Width = 150 ' 너비 변경
shp.Height = 80 ' 높이 변경
End Sub
|
📌 5) 도형 삭제
Sub 도형_삭제()
Dim shp As Shape
Set shp = ActiveSheet.Shapes("사각형1")
shp.Delete
End Sub
|
📌 6) 모든 도형 삭제
Sub 모든_도형_삭제()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
shp.Delete
Next shp
End Sub
|
📌 현재 시트에 있는 모든 도형 삭제
📌 7) 모든 도형 이름 출력
Sub 도형_이름_출력()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print shp.Name ' 즉시 실행 창에 이름 출력
Next shp
End Sub
|
📌 현재 시트에 있는 모든 도형의 이름을 출력
📌 8) 도형 숨기기 / 표시
Sub 도형_숨기기()
ActiveSheet.Shapes("사각형1").Visible = msoFalse ' 도형 숨김
End Sub
Sub 도형_보이기()
ActiveSheet.Shapes("사각형1").Visible = msoTrue ' 도형 보이기
End Sub
|
📌 도형을 숨기거나 다시 표시
📌 9) 도형 정렬 (맨 앞으로 가져오기)
Sub 도형_맨앞으로()
ActiveSheet.Shapes("사각형1").ZOrder msoBringToFront
End Sub
|
📌 도형을 다른 개체 위로 올리기
📌 10) 도형 클릭 시 매크로 실행 (매크로 버튼 만들기)
Sub 매크로_버튼_만들기()
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 100, 100, 120, 50)
shp.TextFrame.TextRange.Text = "클릭하세요"
shp.OnAction = "버튼_클릭" ' 클릭하면 "버튼_클릭" 매크로 실행
End Sub
Sub 버튼_클릭()
MsgBox "버튼이 클릭되었습니다!"
End Sub
|
📌 클릭하면 메시지 박스를 띄우는 버튼 생성
📝 정리
- ActiveSheet.Shapes("이름") → 특정 도형 선택
- Shapes.AddShape(도형종류, X, Y, 너비, 높이) → 도형 추가
- .TextFrame.TextRange.Text = "내용" → 텍스트 삽입
- .Fill.ForeColor.RGB = RGB(255,0,0) → 도형 색상 변경
- .Delete → 도형 삭제
- .Visible = msoFalse → 도형 숨기기
- .OnAction = "매크로이름" → 도형 클릭 시 매크로 실행
🔥 Shape 개체를 활용하면 엑셀에서 다양한 자동화 UI를 만들 수 있습니다! 🚀