ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • VBA/파워포인트/사진정리 - 2.2. 사진 정렬
    코딩/vba 2024. 1. 13. 13:45
    728x90

    슬라이드에 있는 사진을 정렬하는 서브루틴으로, 슬라이드에 있는 도형들(slideShapes), 도형들의 배열(shapesArray), 사진의 위치(positions), 그리고 크기(sizes)를 인자로 받는다. 인자들은 모두 참조형으로 받는다.

    1. numberOfPics = GetNumberOfPictures(slideShapes):
      GetNumberOfPictures 함수를 호출하여 슬라이드에 있는 사진의 수를 계산하고, numberOfPics에 저장.
    2. 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를 사용하여 네 번째 사진에 대한 인덱스를 관리.
    3. 각각의 경우에서 Debug.Print "Case X"는 현재 처리 중인 경우를 디버깅 목적으로 출력.
    4. 설정된 위치와 크기에 따라 각 사진의 도형 속성을 변경.
    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

    댓글

Designed by Tistory.