글목록

2022년 2월 6일

PowerPoint 매크로 - 선택 그림/도형 위치 순환하기

Powerpoint에서 열심히 수작업으로 그림을 배열했더니, 실수로 위치가 1~2개씩 밀려서 배열된 경우가 있습니다. 그럼 다시 마우스로 끌어서 대략적인 위치를 맞춘 후 정렬 기능이나, Ctrl+방향키 등을 써서 다시 정확하게 모눈에 맞게 맞추려다 보면 여간 귀찮은 일이 아닙니다.

몇개 정도의 그림이면 별로 상관없겠지만, 갯수가 많고 크기가 정형화된 여러 개의 사진을 배열하다보면 조금만 비뚤어져도 보기가 좋지 않습니다.

현재의 그림 배치에서 단지 서로의 위치를 순환하는 기능을 아래와 같이 매크로로 작성할 수 있습니다.


<원래 배치>


<그림을 앞으로 순환>

<그림을 뒤로 순환>


'----------------------------

Function RotatePicPosition(iDir As Integer)
  On Error GoTo ErrorHandler
  Dim i As Long, tX() As Single, tY() As Single, n As Long
  Dim tSel As ShapeRange
  
  '사용자가 선택한 도형을 미리 짜놓은 함수를 이용해 ShapeRange로 읽어옵니다.
  Set tSel = SelectedShapeRange
  n = tSel.Count
  'tSel은 1~n개의 배열로 구성되므로, 각 도형의 가로, 세로 중심점 좌표를 저장할 수 있도록 0~n+1개의 배열을 정의해줍니다.
  ReDim tX(n + 1)
  ReDim tY(n + 1)
  '만약 함수의 입력값을 1을 받았다면 그림 위치를 앞으로 순환하고, 입력값을 -1로 받았다면 뒤로 순환하도록 합니다. 중심점의 위치는 각 그림의 왼쪽 좌표와 그림 폭의 1/2을 합치면 됩니다.
  For i = 1 To n
    tX(i + iDir) = tSel(i).Left + tSel(i).Width / 2
    tY(i + iDir) = tSel(i).Top + tSel(i).Height / 2
  Next
  '1번째 그림 또는 마지막번째 그림은 순환 방향에 따라 마지막 또는 1번째 그림의 위치로 바꿔줍니다. 
  If iDir = -1 Then
    tX(n) = tSel(1).Left + tSel(1).Width / 2
    tY(n) = tSel(1).Top + tSel(1).Height / 2
  Else
    tX(1) = tSel(n).Left + tSel(n).Width / 2
    tY(1) = tSel(n).Top + tSel(n).Height / 2
  End If
  '1~n번 좌표만 읽어서 각 그림의 현재 위치를 다시 지정합니다. 그림의 왼쪽 및 위쪽 좌표를 지정하기 위해서는 그림의 중심점 좌표 tX, tY에서 그림의 폭과 높이의 1/2만큼 빼주면 됩니다.
  For i = 1 To n
    tSel(i).Left = tX(i) - tSel(i).Width / 2
    tSel(i).Top = tY(i) - tSel(i).Height / 2
  Next
ErrorHandler:
End Function
'----------------------------
'그림을 선택한 후 아래의 매크로를 실행하여 그림의 순서를 바꿔줍니다.
Sub 그림위치순환_뒤로()
  RotatePicPosition -1
End Sub
'----------------------------
Sub 그림위치순환_앞으로()
  RotatePicPosition 1
End Sub

댓글 없음:

댓글 쓰기

의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~

많이 본 글 :