Summer tree
-
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_으로 시작하는 두 개의 메인 프로시저와 세 개의 유틸리티, 나머지는 서브 프로시저들이다. 메인은 사진들을 붙여넣는 기능과 사진을 정렬하는 기능으로 나눴다. 사진을 붙여넣고 나서 수동으로 사진을 슬라이드 별로 검토하고 삭제하거나 옮기는 일을 하고,..
-
VBA/버블정렬(Bubble sort)코딩/vba 2024. 1. 9. 15:54
VB에는 Array.Sort()라는 함수가 있어 배열정렬이 가능하지만 VBA에서는 정렬함수가 따로 없다. 그래서 배열을 정렬할 함수를 별도로 만들어 써야 하는데, 그 중 많이 쓰이는 것이 코드가 간단한 버블정렬이다. 좀 느리긴 하지만 코드가 짧아 편리하다. 원리는 배열 원소의 처음부터 끝까지 하나씩 비교해가면서 좌우를 바꾸는 방식이다. 보다 상세한 내용은 위키백과를 참조한다. 그리고 위키백과나 다른 참조자료들의 그림은 직관적이지 않아 새로 그려 원리를 설명한다. 비교는 아래 그림처럼 한다. ' 인수로 받는 arr 배열은 값이 아닌 참조로 받으며 variant값으로 정의 Sub BubbleSort(ByRef arr As Variant) Dim i As Integer, j As Integer Dim tmp ..
-
VBA/PowerPoint/슬라이드 사이즈 픽셀 단위로 구하기코딩/vba 2024. 1. 9. 02:22
파워포인트에서는 cm로 사진이나 도형의 크기를 지정한다. 물론 크기를 지정할 때 px 단위로 입력은 가능하다. 하지만 이것이 대량의 자료를 자동으로 처리하려고 할 때 꽤 귀찮다. 그래서 픽셀단위로 자동화를 하려고 할 때 슬라이드 사이즈를 먼저 알아야 다음 자동화를 할 수 있다. 그래서 현재 슬라이드의 크기를 알 수 있는 코드를 작성한다. Sub GetSlideSize() Dim currentSlide As slide Dim slideWidth As Integer Dim slideHeight As Integer ' 현재 활성 슬라이드 가져오기 Set currentSlide = ActiveWindow.View.slide ' 슬라이드의 픽셀 단위 크기 가져오기 slideWidth = currentSlide.M..