VBA
-
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..
-
VBA/.Value와 .Formula의 차이코딩/vba 2023. 12. 21. 15:08
나는 아마추어 프로그래머라서 코딩을 자주 하는 편은 아니고 필요할 때 그때 그때 한다. 그러다보니 한 번 코딩하고 난 뒤 한참 뒤에 다시 사용하려고 하면 기본부터 헷갈린다. 어제까지 파이썬을 써서 만든 자료를 엑셀에서 수식으로 연동시키려 몇 달 동안 쓰지 않은 vba를 사용하려 하니 '뭘로 시작하더라???'라고 어이없게도 Sub부터 생각이 안난다. 아마 VBA를 직업적으로 쓰는 사람들은 별로 없으니 다른 사람들도 내 심정 이해가 되지 않을까 싶다. VBA로 셀에 수식이나 값을 입력할 때 .Value와 .Formula에 대한 구분법 Sub value_formula() Range("a1").Value = 100 Range("a2").Formula = 100 Range("b1").Value = "=a1+a2"..
-
[VBA/Set 키워드] 개체 참조 Set 키워드코딩/vba 2023. 6. 6. 17:28
아마 VBA 초보프로그래머에게 가장 헷갈리는 것 중 하나가 set일 것이다. 어떤 변수는 그냥 정의하고 어떤 것은 set을 붙여야 한다. 그 기준에 대해 설명한다. 변수가 객체의 참조를 세팅하면 set, 객체 자체가 아닌 객체의 값만 가져올 때는 set을 사용하지 않는다. set을 사용하면 객체의 내용을 조작할 수 있다. set을 사용하지 않으면 객체에 저장된 값만을 불러온다. 객체에는 아무런 영향을 주지 않는다. 다시 말하면 객체를 직접 조작하기 위해서는 set을 사용하고 값만 필요한 객체는 set이 필요없다. VBA에서 Set 키워드를 사용하여 개체를 정의할 때와 그렇지 않을 때의 차이점은 다음과 같다. 참조 유형: Set 키워드를 사용하여 개체를 정의할 때, 변수는 해당 개체에 대한 참조를 보유한다..
-
[VBA/Array] Not Not Array 로 배열원소 확인하기코딩/vba 2023. 4. 1. 14:43
배열 확인: 배열의 존재와 원소의 존재 배열의 존재 확인 배열이 존재하는 지는 IsArray()로 확인할 수 있다. VBA의 IsArray() 함수는 인자로 전달된 변수가 배열인지 여부를 판별하는 함수이다. 인자가 배열이면 True를 반환하고, 배열이 아니면 False를 반환한다. 예를 들어, 다음과 같이 IsArray() 함수를 사용하여 변수가 배열인지 여부를 판별할 수 있다. Sub sample_IsArray() Dim arr() As Variant Dim sng As Single Debug.Print IsArray(arr) ' True 출력. Debug.Print IsArray(sng) ' False 출력. End Sub 위 코드에서는 arr 변수가 배열이므로 IsArray(arr)이 True가 되..