VBA 매크로를 사용하여 그림의 크기(높이 및 너비)를 조절하는 방법을 살펴보겠습니다.
그림의 크기를 조절하려면 먼저 그림 오브젝트를 선택해야 합니다.
워드 문서에서 그림 오브젝트는 ActiveDocument.InlineShapes(index)을 통해 접근할 수 있습니다.
ActiveDocument.InlineShapes(index)
ActiveDocument는 현재 활성화된 문서를 가리킵니다. InlineShapes()는 문서내 모든 그림들의 집합이고 index 파라미터는 그림이 나오는 순서입니다. 즉, ActiveDocument.InlineShapes(1)은 문서 내에서 가장 먼저 나오는 그림을 가리킵니다.
그림 오브젝트에 접근하는 방법을 알았으니 높이와 너비을 지정해보겠습니다.
다음은 문서 내 첫 번째 그림의 높이를 100 포인트로 너비는 200 포인트로 설정하는 매크로입니다.
Sub Resize_figure()
ActiveDocument.InlineShapes(1).Height = 100
ActiveDocument.InlineShapes(1).Width = 200
End Sub
그림의 크기를 포인트가 아닌 센티미터 단위로 지정하려면 어떻게 해야 할까요?
CentimetersToPoints() 함수를 사용하면 됩니다.
다음은 문서 내 첫 번째 그림의 높이를 10cm로 너비는 12cm로 설정하는 매크로입니다.
Sub Resize_figure()
ActiveDocument.InlineShapes(1).Height = CentimetersToPoints(10)
ActiveDocument.InlineShapes(1).Width = CentimetersToPoints(12)
End Sub
많은 경우에 우리는 그림의 크기를 조정하되 가로(높이) 세로(너비) 비율은 유지하려고 합니다.
이를 위해 너비와 높이 중 하나를 수정하면서 기존 값과 수정된 값의 비율을 별도의 변수에 저장해두고 나머지 수치도 이 비율로 변경하는 방법이 있습니다. 아래 매크로가 그 예시입니다.
Sub Resize_figure()
Dim size_ratio As Double
size_ratio = CentimetersToPoints(12) / ActiveDocument.InlineShapes(1).Width
ActiveDocument.InlineShapes(1).Width = CentimetersToPoints(12)
ActiveDocument.InlineShapes(1).Height = ActiveDocument.InlineShapes(1).Height * size_ratio
End Sub
그림의 너비를 12cm로 수정하면서 가로 세로 비율을 유지하는 코드입니다. 먼저 size_ratio 변수에 원본 그림의 너비 대비 새로운 너비(12cm)의 비율을 저장했습니다. 너비를 12cm로 조절한 후 높이도 너비가 변경된 비율만큼 조절했습니다.
ActiveDocument.InlineShapes가 반복되어 쓰이는 바람에 코드가 어지러운 거 같습니다. With문을 사용하여 수정해보겠습니다. Const문을 통해 12cm도 미리 정의해두겠습니다.
Sub Resize_figure()
Const NEW_WIDTH As Integer = 12
Dim size_ratio As Double
With ActiveDocument.InlineShapes(1)
size_ratio = CentimetersToPoints(NEW_WIDTH) / .Width
.Width = CentimetersToPoints(NEW_WIDTH)
.Height = .Height * size_ratio
End With
End Sub
이렇게 하면 가로 세로 비율을 고정시킨 상태에서 그림 크기를 조절할 수 있습니다.
마지막으로 문서 내 모든 그림의 너비를 동일하게 맞추려면 어떻게 하면 될까요? 위에서 만든 코드에 For 문을 추가하면 됩니다.
Sub Resize_figure()
Const new_width As Integer = 12
Dim size_ratio As Double
Dim ishape As InlineShape
For Each ishape In ActiveDocument.InlineShapes
size_ratio = CentimetersToPoints(new_width) / ishape.Width
ishape.Width = CentimetersToPoints(new_width)
ishape.Height = ishape.Height * size_ratio
Next
End Sub
InlineShapes내에 그림들을 하나씩 참조하면서 너비는 12cm로 동일하게 맞추고 높이는 가로 세로 비율에 따라 수정합니다.
그럼 이만...
'💻 IT > 워드, 엑셀 VBA 매크로' 카테고리의 다른 글
[엑셀] 율리우스력과 고레고리력의 오차 계산하기 (0) | 2024.05.15 |
---|---|
[MS 워드 VBA 매크로] 찾기 & 바꾸기 기능 속성 (0) | 2022.11.04 |
[MS 워드 VBA 매크로] 새 문서 열기, 클립보드 내용 붙이기, 문서 저장 (0) | 2020.12.13 |
[MS 워드 VBA 매크로] 커서 이동 (Selection.Move) (0) | 2020.11.14 |
댓글