파워포인트 작업을 하다가 보면
단순 반복작업이 많습니다.
똑같은 작동을 하도록 같은 작업을 수십번 하는 것이 지겨울 수 있습니다.
그럴 때는 VBA매크로를 이용해보세요.
(물론 처음엔 VBA를 작성하는 것이 수작업보다 시간이 더 걸릴 수는 있습니다.)
이번 경우는 배경도형위에 텍스트 상자가 있을 때 배경도형 중앙에 텍스트 상자가 오도록 하는 작업입니다.
지식인 링크(PPT 텍스트 상자 및 도형과 텍스트상자 정렬하기)
아래와 같은 코드로 현재 선택된 텍스트박스와 도형을 정렬시킬 수 있습니다.
두 도형을 위치와 크기를 동일하게 맞추고 가운데 정렬합니다.
Alt-F11누르고 삽입-모듈 추가하고 코드를 붙여넣고 코드창 닫은 다음
일반편집화면에서 텍스트박스와 도형을 동시에 선택하고 Alt-F8로 AlignCurrentTwoShapes 매크로 실행합니다.
Option Explicit
Sub AlignCurrentTwoShapes()
Dim shp1 As Shape, shp2 As Shape
Dim shpT As Shape, shpB As Shape
On Error Resume Next
If ActiveWindow.Selection.ShapeRange.Count <> 2 Then MsgBox "도형을 2개 선택하세요": Exit Sub
Set shp1 = ActiveWindow.Selection.ShapeRange(1)
Set shp2 = ActiveWindow.Selection.ShapeRange(2)
If shp1.Type = msoTextBox Then
Set shpT = shp1
Set shpB = shp2
ElseIf shp2.Type = msoTextBox Then
Set shpT = shp2
Set shpB = shp1
Else
MsgBox "텍스트 박스와 일반 도형을 선택해야합니다.": Exit Sub
End If
Call AlignTextShape(shpT, shpB)
End Sub
Function AlignTextShape(shpText As Shape, shpBack As Shape)
shpBack.ZOrder msoSendBehindText
shpText.Width = shpBack.Width '넓이 동일하게
shpText.Height = shpBack.Height '높이 동일하게
shpText.Left = shpBack.Left '좌표 동일하게
shpText.Top = shpBack.Top
shpText.TextFrame.VerticalAnchor = msoAnchorMiddle '세로 가운데로
shpText.TextFrame2.WordWrap = msoFalse '줄바뀜 없이
shpText.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter '가로 가운데로
End Function
좀더 나아가서 현재 선택된 모든 (텍스트박스) 도형에 대해 위와 같은 처리를 할 수도 있습니다.
텍스트박스에 대해 겹치는 도형을 찾아서 서로 일치시키고 가운데 정렬합니다.
슬라이드에서 텍스트박스를 포함하여 원하는 도형들을 선택하고 Alt-F8로 AlignSelectedShapes를 실행합니다.
Sub AlignSlectedShapes()
Dim shp As Shape
Dim shpT As Shape, shpB As Shape
On Error Resume Next
If ActiveWindow.Selection.ShapeRange.Count < 1 Then MsgBox "도형을 선택하세요": Exit Sub
For Each shp In ActiveWindow.Selection.ShapeRange
If shp.Type = msoTextBox Then
Set shpT = shp
'Set shpB = Nothing
Set shpB = FindBackShape(shp)
If Not shpB Is Nothing Then
Call AlignTextShape(shpT, shpB)
End If
End If
Next shp
End Sub
' 겹치는 도형 찾기
Function FindBackShape(oShp As Shape) As Shape
Dim shp As Shape
Dim sld As Slide
Set sld = oShp.Parent
For Each shp In sld.Shapes
If shp.Type <> msoTextBox And Not shp Is oShp Then
If AABB(shp, oShp) Then Set FindBackShape = shp: Exit For
End If
Next shp
End Function
'AABB 충돌 체크
Function AABB(A As Shape, B As Shape) As Boolean
If B.Left <= A.Left + A.Width And A.Left <= B.Left + B.Width _
And A.Top <= B.Top + B.Height And B.Top <= A.Top + A.Height Then AABB = True
End Function
위 두 매크로 실행화면입니다.
더 빨리 위 기능을 호출하려면 빠른 실행에 위 두 매크로를 추가하면
(빠른실행도구모음사용자지정 - 매크로 - 매크로함수 우측으로 보내기)
텍스트상자 도형들을 선택한 다음 Alt-4 나 Alt-5 키 등 Alt-숫자키로 바로 실행할 수도 있습니다.
아래 영상 참고하세요.
첨부파일 참고하세요.
파일 속성에서 차단해제 적용권장하고 반드시 매크로 허용해서 열어서 테스트해보세요.
'PPT+VBA' 카테고리의 다른 글
이동경로 애니메이션의 VML 기초 문법 및 수정 방법 (0) | 2021.08.02 |
---|---|
RGB Color Constants, VBA RGB 색상 예약어 목록 (0) | 2021.07.04 |
pptx의 내용에 문제가 있습니다. 프리젠테이션 복구가 시도될 수 있습니다. (0) | 2021.06.26 |
사진 일괄 삽입 매크로 (3) | 2021.06.08 |
ppt를 그림 프리젠테이션으로 저장 (1) | 2021.05.12 |
ppt 스톱워치 - 타이머 누적 기록 (3) | 2021.04.22 |
현재 슬라이드를 윈도우 바탕화면으로 설정 (0) | 2021.03.23 |
MS파워포인트 버전별 차이점 정리 (0) | 2021.01.26 |
최근댓글