전체 글
-
VBA/파워포인트/사진정리 - 2.1. Shapes 배열 생성코딩/vba 2024. 1. 13. 13:24
' 이 프로시저는 값을 반환하는 함수로 작성한다. 배열을 반환하므로 Variant를 사용한다. ' 인수는 슬라이드의 Shapes 객체의 참조, 나머지는 옵션값으로 배열을 정렬할 지 여부의 부울 값, ' 키 디멘전 값, 디멘전 수를 받는다. Function GetShapesArray(ByRef slideShapes As Shapes, _ Optional ByVal boolSortArray As Boolean, Optional ByVal keyDimension As Integer, _ Optional ByVal dimensions As Integer) As Variant ' build array (shape index, left position) ' 변수 i는 반복문에서 사용되는 도형 인덱스이며 ' shap..
-
VBA/파워포인트/사진정리 - 2. 사진 정열코딩/vba 2024. 1. 13. 13:01
슬라이드에 삽입된 사진들을 정리하는 메인 프로시저다. 파일 목록 가져오기처럼 여기서 사용자 입력값을 모두 입력한다. 파일 목록의 키 디멘전과 총 디멘전 수를 정한다. 그리고 사진을 배치할 픽셀 위치와 사진 크기를 슬라이드 당 사진 수에 따라 미리 정한다. 루프 종료 조건을 주기 위해 슬라이드 수를 세어 변수에 저장한다. 프로세스를 시작할 지점을 알기 위해 현재 화면 상 슬라이드 번호를 확인한다. 그런 다음, 현재 슬라이드부터 마지막 슬라이드까지 아래의 절차를 반복한다. Do While slideIdx < slideCount + 1: 슬라이드 인덱스가 slideCount보다 작은 동안 루프를 실행. slideCount는 총 슬라이드 수. Debug.Print "Working: Slide " & slideI..
-
VBA/파워포인트/사진정리 - 1.2. 사진 삽입 서브 프로시저코딩/vba 2024. 1. 13. 00:21
폴더의 사진 파일을 슬라이드로 옮기는 프로시저다. 인수로 파일들, 배치 위치와 사진 폭을 받는다. 파일명과 배치 위치는 배열이기 때문에 참조로 전달받고 사진 폭은 값으로 전달 받는다. 처리할 방법은 아래와 같다. 처리할 파일의 수를 계산한다. 현재 슬라이드 번호를 변수에 저장한다. 반복되는 호출을 위해 현재 파워포인트를 객체화하고 새로 만드는 슬라이드를 위해 현재 레이아웃도 저장한다. 다음의 내용으로 Do..While문으로 사진 목록을 순환한다. 슬라이드를 추가하는 이유는 현재의 사진 ZOrder를 변경하면 사진의 인덱스가 바뀌기 때문에 전체 사진을 순환할 수 없어 새 슬라이드에 사진을 하나씩 복사하여 내보내며 ZOrder를 정리하기 위함이다. 이 순환은 i=0으로부터 시작하지만 순환할 때마다 i=i+3..
-
VBA/파워포인트/사진정리 - 1.1.1. 배열 정렬코딩/vba 2024. 1. 12. 15:54
배열 정렬용 유틸리티 SortArray() 이 유틸리티는 배열을 인수로 받아 버블정렬방식으로 정렬한 후 배열을 다시 반환하는 유틸리티다. 처음에 사진삽입만 처리할 때는 1차원 배열만 사용하므로 코드가 간단했는데 사진정렬을 하면서 다차원배열을 사용하는 바람에 코드가 복잡해져 버렸다. VBA/버블정렬(Bubble sort) VBA/버블정렬(Bubble sort) VB에는 Array.Sort()라는 함수가 있어 배열정렬이 가능하지만 VBA에서는 정렬함수가 따로 없다. 그래서 배열을 정렬할 함수를 별도로 만들어 써야 하는데, 그 중 많이 쓰이는 것이 코드가 간단한 버 summertrees.tistory.com 다차원 배열 정렬용 코드 인수로는 배열, 정렬용 차원의 번호, 차원 수를 입력받는다. 정렬용 차원을 기..
-
VBA/파워포인트/사진정리 - 1.1. 파일명 배열코딩/vba 2024. 1. 12. 15:26
파일명 배열 생성용 유틸리티 GetFiles() GetFiles()는 파일 이름들을 수집하고 정렬해서 배열을 반환한다. 이 프로시저는 이 프로젝트 외 다른 용도로도 사용가능하므로 유틸리티다. 실수로 경로명에 "\"를 누락해도 상관없도록 경로명을 처리한다. 폴더를 검색하고 디렉토리가 아닌 파일명만 배열에 저장한다. 이 때 경로명과 파일명을 합쳐 저장한다. 그리고 프로시저가 정상 작동하는지를 확인할 수 있도록 파일명을 '직접 실행'창에 출력한다. 그 후 VBA에는 배열을 정렬하는 함수가 없으므로 GetFiles()는 다시 서브 프로시저를 사용해서 배열을 정렬하고 최종적으로 배열을 반환한다. Function GetFiles(ByVal folderPath As String, ByVal fileExtension ..
-
VBA/파워포인트/사진정리 - 1. 사진 삽입코딩/vba 2024. 1. 12. 14:56
메인 프로시저 Main_InsertPictures(): 사진 삽입 메인은 두 개의 서브 프로시저를 사용한다. 하나는 폴더의 파일이름의 배열을 만들고 또 다른 하나는 사진을 삽입한다. 사용자가 입력해야 하는 입력값은 모두 메인에서만 처리한다. 사전 입력이 필요한 항목은 폴더 경로, 확장자, 슬라이드에 사진을 배치할 위치다. Sub Main_InsertPictures() ' 사진 삽입 메인 프로시저 ' 데이터 Dim path As String, extension As String Dim positions() As Variant path = "Z:\Life\Upload\" extension = "*.*" positions = Array(Array(0, 0), Array(480, 0), Array(480, 27..
-
VBA/배열을 함수로부터 전달받기코딩/vba 2024. 1. 11. 16:25
프로그램을 여러 서브프로그램으로 나눠 만들면 수정하기가 쉽고 이해가 쉽다. 그런데 배열을 다른 서브프로그램에서 전달받으려 할 때 종종 타입에러가 난다. 이는 VBA가 배열을 전달할 때 Variant로만 전달가능하기 때문에 일어나는 일이다. 아래 PrintArray()에서는 배열을 Integer로 지정했다. 만일 배열을 전달받을 서브프로그램에서 동일한 타입 Integer로 지정하면 배열인지 정수인지 구분할 수가 없어 에러가 난다. 함수에서 리턴값으로 배열을 넘기려면 무조건 Variant로 데이터형을 지정해야 한다. 함수는 Variant로 배열을 전달하지만 받는 프로그램은 정수형 배열로 지정되어도 상관없다. Sub PrintArray() Dim arr() As Integer, countArray As Int..
-
VBA/Shape간 순환코딩/vba 2024. 1. 11. 04:37
아래 PowerPoint에서 작성한 두 프로그램이 있다. 표면상으로는 첫번째 프로그램이 더 길고 불필요하게 느껴지고 두번째가 더 간결하다. Shape을 사진인지 판단하고 사진이면 위치와 크기를 변화시키고 사진이 아니면 앞으로 가져온다. 하지만 두번째 코드는 잘 작동하지 않는다. ZOrder를 변경시킴으로 인해 shps 컬렉션에 영향을 끼친다. Shapes(1)은 ZOrder가 가장 아래인 개체를 뜻하는데 ZOrder를 사용함으로 인해 Shapes의 인덱스가 변해서 그렇다. 그래서 ZOrder는 사진만 정렬시킨 후 별도로 코드를 만들어야 했다. For Each shp In shps If shp.Type = msoPicture Then With shp .Top = positions(0)(0) .Left = ..
-
VBA/파워포인트/사진 crop/PictureFormat.CropBottom()코딩/vba 2024. 1. 10. 15:52
파워포인트에서 사진을 컨트롤하는 것은 맥의 키노트보다 열악하다. 파워포인트에서 사진을 다루다보면 키노트에서의 자유로움이 그리워진다. 그래서 사진을 삽입하고 배치하는 기본적인 컨트롤은 VBA를 사용해서 파워포인트에서 작업하고 다시 키노트에서 불러와 세세한 작업을 하게 된다. 파워포인트에서 사진을 잘라 슬라이드에 맞추는 것은 쉬운 일이지만 사진 속의 대상을 자유자재로 위치시키는 것은 키노트에 비해 어렵다. 애플은 사진에 대해서는 언제나 진심인 듯 하다. VBA Reference 오류 VBA reference에 따르면, PictureFormat.CropBottom()의 인수는 크라핑할 비율이라고 되어있다. 설명도 그렇고 예제 프로그램도 그렇게 되어있다. ' VBA Reference의 예제 프로그램 percen..
-
VBA/파워포인트/사진정리 - 0. 개요코딩/vba 2024. 1. 10. 14:01
맥에서 키노트로 열심히 사진을 정리하던 중, 왜 내가 이 노가다를 하고 있나 하는 자괴감이 생겨 파워포인트에서 자동정렬하는 VBA 코드를 만들었다. 키노트에서는 자동화를 할 수 있는 방법이 없다. MS가 Basic을 개발하고, 그 Basic을 Q-Basic으로, 또 Visual Basic과 VBA로 발전시킨건 더 말할 필요없이 찬사받아야 할 정책이었다. 거기다 공짜, MS의 Basic에 대한 열정은 높이 사줘야 한다. 모두 12개의 프로시저를 만들었다. Main_으로 시작하는 두 개의 메인 프로시저와 세 개의 유틸리티, 나머지는 서브 프로시저들이다. 메인은 사진들을 붙여넣는 기능과 사진을 정렬하는 기능으로 나눴다. 사진을 붙여넣고 나서 수동으로 사진을 슬라이드 별로 검토하고 삭제하거나 옮기는 일을 하고,..