본문 바로가기
💻 IT/워드, 엑셀 VBA 매크로

[MS 워드 VBA 매크로] 그림 크기 조절하기

by The Raven 2024. 5. 10.
728x90

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로 동일하게 맞추고 높이는 가로 세로 비율에 따라 수정합니다. 

그럼 이만...

728x90
반응형

댓글