-
VBA/파워포인트/사진정리 - 2.2. 사진 정렬코딩/vba 2024. 1. 13. 13:45728x90
슬라이드에 있는 사진을 정렬하는 서브루틴으로, 슬라이드에 있는 도형들(slideShapes), 도형들의 배열(shapesArray), 사진의 위치(positions), 그리고 크기(sizes)를 인자로 받는다. 인자들은 모두 참조형으로 받는다.
- numberOfPics = GetNumberOfPictures(slideShapes):
GetNumberOfPictures 함수를 호출하여 슬라이드에 있는 사진의 수를 계산하고, numberOfPics에 저장. - Select Case numberOfPics: numberOfPics의 값에 따라 다른 경우를 나누어 처리.
- Case 1: 사진의 수가 1개인 경우, positions(0) 및 sizes(0)에 따라 사진을 위치 및 크기를 설정.
- Case 2: 사진의 수가 2개인 경우, positions(1) 및 sizes(1)에 따라 각각의 사진을 위치 및 크기를 설정. 변수 j를 사용하여 두 번째 사진에 대한 인덱스를 관리.
- Case 3: 사진의 수가 3개인 경우, positions(2) 및 sizes(2)에 따라 각각의 사진을 위치 및 크기를 설정. 변수 j를 사용하여 세 번째 사진에 대한 인덱스를 관리, 세 번째 사진의 경우에는 가로 크기와 세로 크기를 번갈아가며 적용.
- Case 4: 사진의 수가 4개인 경우, positions(3) 및 sizes(3)에 따라 각각의 사진을 위치 및 크기를 설정. 변수 j를 사용하여 네 번째 사진에 대한 인덱스를 관리.
- 각각의 경우에서 Debug.Print "Case X"는 현재 처리 중인 경우를 디버깅 목적으로 출력.
- 설정된 위치와 크기에 따라 각 사진의 도형 속성을 변경.
Sub ArrangePictures(ByRef slideShapes As Shapes, ByRef shapesArray() As Integer, _ ByRef positions As Variant, ByRef sizes As Variant) Dim numberOfPics As Integer numberOfPics = GetNumberOfPictures(slideShapes) ' arrange position & size Dim i As Integer, j As Integer Dim shp As Shape j = 0 Select Case numberOfPics Case 1 Debug.Print "Case 1" For i = LBound(shapesArray, 2) To UBound(shapesArray, 2) Set shp = slideShapes(shapesArray(0, i)) If shp.Type = msoPicture Then With shp .Left = positions(0)(0) .Top = positions(0)(1) .Width = sizes(0)(0) End With End If Next i Case 2 Debug.Print "Case 2" For i = LBound(shapesArray, 2) To UBound(shapesArray, 2) Set shp = slideShapes(shapesArray(0, i)) If shp.Type = msoPicture Then With shp .Left = positions(1)(j)(0) .Top = positions(1)(j)(1) .Height = sizes(1)(j) End With j = j + 1 End If Next i Case 3 Debug.Print "Case 3" For i = LBound(shapesArray, 2) To UBound(shapesArray, 2) Set shp = slideShapes(shapesArray(0, i)) If shp.Type = msoPicture Then If j = 0 Then With shp .Left = positions(2)(j)(0) .Top = positions(2)(j)(1) .Height = sizes(2)(j) End With Else With shp .Left = positions(2)(j)(0) .Top = positions(2)(j)(1) .Width = sizes(2)(j) End With End If j = j + 1 End If Next i Case 4 Debug.Print "Case 4" For i = LBound(shapesArray, 2) To UBound(shapesArray, 2) Set shp = slideShapes(shapesArray(0, i)) If shp.Type = msoPicture Then With shp .Left = positions(3)(j)(0) .Top = positions(3)(j)(1) .Width = sizes(3)(j) End With j = j + 1 End If Next i Case Else End Select End Sub
이 프로시저는 서브 프로시저로 사진의 갯수를 세는 함수를 사용한다.
사진 갯수 계산
VBA/파워포인트/사진정리 - 2.2.1. 사진 수 계산 함수
728x90'코딩 > vba' 카테고리의 다른 글
VBA/파워포인트/사진정리 - 2.3. Shape 이동 (0) 2024.01.13 VBA/파워포인트/사진정리 - 2.2.1. 사진 수 계산 함수 (0) 2024.01.13 VBA/파워포인트/사진정리 - 2.1. Shapes 배열 생성 (0) 2024.01.13 VBA/파워포인트/사진정리 - 2. 사진 정열 (0) 2024.01.13 VBA/파워포인트/사진정리 - 1.2. 사진 삽입 서브 프로시저 (0) 2024.01.13 - numberOfPics = GetNumberOfPictures(slideShapes):