여기저기 분산된 사진이나 도형개체를 일정한 간격으로 자동으로 배치해주는 방법입니다.
VBA로 아래와 같이 개체를 원하는 가로개수 * 세로개수로 배열해줍니다.
실행 영상입니다.
사용된 코드:
더보기
'선택된 도형들을 일정하게 규칙적으로 배열합니다.
Sub ArrangeShapePosition()
Dim usr As String, D As Integer, sDefault As String
Dim RowCol() As String
Dim Cols As Integer, Rows As Integer
Dim r As Integer, c As Integer, i As Integer
Dim BoxW As Single, BoxH As Single
Dim SW As Single, sh As Single
Dim sld As Slide
Dim shp As Shape, shpN As Shape
On Error Resume Next
Set sld = ActiveWindow.Selection.SlideRange(1)
i = ActiveWindow.Selection.ShapeRange.Count
If i = 0 Then MsgBox "먼저 대상 도형들을 선택하세요.": Exit Sub
On Error GoTo 0
D = -Int(-Sqr(i))
sDefault = D & ", " & -Int(-i / D)
usr = InputBox("현재 선택된 도형들을 선택한 순서대로 슬라이드에 일정하게 배치합니다." & vbNewLine & vbNewLine & _
"가로와 세로 칸수를 콤마(,)로 구분해서 입력하세요:" & vbNewLine & _
"(예: 3, 2 =>가로3칸*세로2칸/ 6,4 / 4, 5 등)", "개체 자동 배치", sDefault)
If Len(usr) = 0 Then Exit Sub
RowCol = Split(usr, ",")
If UBound(RowCol) <> 1 Then MsgBox "콤마로 구분된 숫자2개가 아닙니다.": Exit Sub
If Not IsNumeric(RowCol(0)) Or Not IsNumeric(RowCol(1)) Then _
MsgBox "숫자로 입력하세요.": Exit Sub
Cols = CInt(RowCol(0)): Rows = CInt(RowCol(1))
'화면 가로 세로 크기
SW = ActivePresentation.PageSetup.SlideWidth
sh = ActivePresentation.PageSetup.SlideHeight
'박스 하나의 가로 세로 크기
BoxW = SW / Cols
BoxH = sh / Rows
i = 0
For Each shp In ActiveWindow.Selection.ShapeRange
With shp
i = i + 1
r = Int((i - 1) / Cols) + 1
c = (i - ((r - 1) * Cols)) Mod (Cols + 1)
.Name = "Pic_" & Format(i, "00")
.Left = (c - 1) * BoxW + (BoxW / 2 - .Width / 2)
.Top = (r - 1) * BoxH + (BoxH / 2 - .Height / 2)
'.TextFrame.TextRange = i
'If r = 1 And c = 1 Then .Select msoTrue Else .Select msoFalse
End With
Next shp
End Sub
아래처럼 분산된 개체를 규칙적으로 배치해줍니다.
참고로 BrightSlide 라는 추가기능을 이용하면 위와 비슷하게 개체를 정렬시켜줄 수 있습니다.
특히 어떤 모양이 될지 Preview를 켜서 미리 볼 수 있고 간격을 바로 바로 조절해줄 수 있습니다.
BrightSlide는 무료 추가기능인데 설치 후 이메일을 등록해야 사용할 수 있습니다.
BrightSlide 실행 영상
샘플 pptm 파일을 첨부합니다. 다운로드 후에 항상 차단해제해주세요.
'PPT+VBA' 카테고리의 다른 글
랜덤 사진 슬라이드쇼 (1) | 2022.11.03 |
---|---|
PPT 합치기 (1) | 2022.10.31 |
VBA로 메모 일괄 처리하기 (2) | 2022.09.28 |
발표자 보기에서 여러 개의 슬라이드 미리 보기 (2) | 2022.09.12 |
원둘레에 여러개의 원 그리기 (0) | 2022.09.05 |
VBA로 이동경로 애니메이션 추가 (0) | 2022.08.30 |
연결된 차트의 시트변경시 연결 자동 복구 (0) | 2022.08.20 |
PPT의 표(테이블)를 엑셀시트에 일괄 복사 (0) | 2022.08.13 |
최근댓글