-
VBA/파워포인트/사진정리 - 2.3. Shape 이동코딩/vba 2024. 1. 13. 14:02728x90
도형을 새로운 슬라이드로 이동시키는 서브루틴으로, 도형의 배열(shapesArray), 이동할 원본 슬라이드의 도형들(sourceShapes), 그리고 이동할 대상 슬라이드의 도형들(destinationShapes)을 인자로 받는다.
- For i = LBound(shapesArray, 2) To UBound(shapesArray, 2): 도형 배열의 인덱스에 대해 반복.
- Set shp = sourceShapes(shapesArray(0, i)): 현재 인덱스에 해당하는 도형을 원본 슬라이드에서 가져온다.
- If shp.Type = msoPicture Then: 가져온 도형이 사진인 경우를 확인. msoPicture는 PowerPoint에서 사진을 나타내는 상수.
- shp.Copy: 현재 도형을 복사.
- destinationShapes.Paste: 대상 슬라이드에 복사한 도형을 붙여넣는다.
- Next i: 다음 인덱스로 이동하여 반복을 계속.
- 두 번째 반복문에서는 도형이 사진이 아닌 경우에 해당하는 도형을 복사하여 대상 슬라이드에 붙여넣는다. 사진과 별도로 처리하는 이유는 사진보다 ZOrder를 뒤에 놓기 위함이다. 이는 사진보다 앞에 놓인다는 뜻이다.
- 이러한 방식으로, 주어진 도형 배열에 따라 원본 슬라이드의 도형을 새로운 슬라이드로 이동시킨다.
원본 슬라이드에서 ZOrder를 변경시키는 방법을 쓰지 않고 새 슬라이드로 이동시키는 이유는 ZOrder를 변경시키면 도형 객체들 순환이 되지 않기 때문이다. 슬라이드의 도형 객체 배열을 만들어 순환할 때 도형의 인덱스 번호를 사용하는데, 이 인덱스 번호는 ZOrder와 같다. 그래서 ZOrder를 변경시키면 인덱스 번호가 변경되어 배열이 처음과 달라진다. 이렇게 되면 어떤 도형은 반복적으로 선택되기도 하고 어떤 도형은 누락되기도 한다. 그러므로 원하는 ZOrder를 만들기 위해 원하는 순서대로 도형의 인덱스 번호를 사용하여 새로운 슬라이드로 복사한다.
도형을 복사한 후 원본 슬라이드의 도형을 지우지 않는 이유는 나중에 원본슬라이드 자체를 삭제하면 모든 도형이 지워지기 때문이다.
728x90Sub MoveShapes(ByRef shapesArray As Variant, sourceShapes As Shapes, _ destinationShapes As Shapes) ''' move shapes to new slide ' copy pictures to new slide Dim shp As Shape Dim i As Integer For i = LBound(shapesArray, 2) To UBound(shapesArray, 2) Set shp = sourceShapes(shapesArray(0, i)) If shp.Type = msoPicture Then shp.Copy destinationShapes.Paste End If Next i ' copy non-pictures to new slide For i = LBound(shapesArray, 2) To UBound(shapesArray, 2) Set shp = sourceShapes(shapesArray(0, i)) If shp.Type <> msoPicture Then shp.Copy destinationShapes.Paste End If Next i End Sub
728x90'코딩 > vba' 카테고리의 다른 글
VBA/파워포인트/사진정리 - 3. 기타 유틸리티 (0) 2024.01.13 VBA/파워포인트/사진정리 - 2.2.1. 사진 수 계산 함수 (0) 2024.01.13 VBA/파워포인트/사진정리 - 2.2. 사진 정렬 (0) 2024.01.13 VBA/파워포인트/사진정리 - 2.1. Shapes 배열 생성 (0) 2024.01.13 VBA/파워포인트/사진정리 - 2. 사진 정열 (0) 2024.01.13