업무에 사용하는 계획 문서에는 약 70개의 셰이프가 있습니다. 모든 것이 정상이지만 새 기능을 추가하려고 합니다. 이러한 모양은 지도에 표시하기 위해 매주 편집점을 사용하여 변경되지만 때로는 모양 "A"가 사용되지 않아 다른 모든 모양과 함께 기본 크기로 되돌리고 싶을 수도 있습니다. 매크로를 통해 이 작업을 수행할 수 있는 방법을 아는 사람이 있습니까? 많은 것을 시도하고 모든 곳에서 검색했지만 도저히 이해할 수 없습니다...
기본 모양이 아닌 경우 기본 모양이 아닌 모든 모양을 기본 크기로 설정합니다.
미리 감사드립니다
답변1
Excel에서 도형의 기본 높이와 너비를 어디에 저장하는지 모르겠습니다. 기본적으로 크기를 드래그하는 대신 클릭하여 배치할 때 모양의 크기를 의미한다고 가정합니다. 예를 들어 타원은 72x72입니다. 사각형에도 마찬가지입니다.
이를 수행할 수 있는 한 가지 방법은 도형의 AlternativeText 속성을 사용하는 것입니다. 이 속성에 기본 크기를 저장할 수 있습니다. 도형을 마우스 오른쪽 버튼으로 클릭하고 도형 서식을 선택한 다음 웹 탭으로 이동하여 72|72를 입력합니다. 너비와 높이 사이의 구분 기호로 파이프를 사용하고 있습니다. 가지고 있는 모든 유형의 도형에 대한 기본 크기가 무엇인지 파악해야 하지만 앞서 말했듯이 Excel에서 해당 크기를 어디에 저장하는지 알 수 없습니다. AlternativeText 속성이 설정되면 아래와 같은 코드를 사용할 수 있습니다.
Sub FixShape()
Dim shp As Shape
Dim vaDefault As Variant
Const sDELIM = "|"
For Each shp In Sheet1.Shapes
If Len(shp.AlternativeText) > 0 Then
vaDefault = Split(shp.AlternativeText, sDELIM)
shp.Width = vaDefault(0)
shp.Height = vaDefault(1)
End If
Next shp
End Sub
이렇게 하면 AlternativeText에 항목이 있는 모든 모양이 기록된 너비와 높이로 설정됩니다. 여기서는 다른 용도로 AlternativeText를 사용하지 않는다고 가정합니다.
AlternativeText를 사용하여 저장하지 않으려면 VBA에서 값을 하드코딩할 수 있습니다.
Sub FixShape2()
Dim shp As Shape
Const lDEFOVALHEIGHT As Long = 72
Const lDEFOVALWIDTH As Long = 72
Const lDEFSQRHEIGHT As Long = 72
Const lDEFSQRWIDTH As Long = 72
For Each shp In Sheet1.Shapes
Select Case shp.AutoShapeType
Case msoShapeOval
shp.Height = lDEFOVALHEIGHT
shp.Width = lDEFOVALWIDTH
Case msoShapeRectangle
shp.Height = lDEFSQRHEIGHT
shp.Width = lDEFSQRWIDTH
End Select
Next shp
End Sub