PPT VBA 업잔 파일 2026 버전으로 업그레이드

지난 글에서 선언 했던 것처럼, 2026년을 맞아 제 업잔 VBA 매크로 파일 업그레이드를 시작했습니다.

지난글 : https://www.gpters.org/nocode/post/submit-your-own-automation-Cakz3J3QtHQmCDB

날로 먹어보기 위한 시도 🤔

가장 먼저 시도해 본 것은 VBA 파일을 그대로 Claude에 업로드 하고 분석 및 데이터 수정을 요청하는 것이었습니다.

한국어 문자 메시지 스크린샷

그런데, 안타깝게도 Claude에서는 매크로가 포함된 파워포인트 파일에서 VBA 코드 정보를 제대로 읽어오지 못하는 이슈가 있었습니다.

한국어 텍스트가 포함된 앱의 스크린샷
한국어로 된 문자 메시지의 스크린샷

결국 해결방법은 조금 번거롭지만 VBA에서 코드를 하나하나 열어서 복분 하면서 물어보기 였습니다.

조금은 번거롭지만 그리 어렵지는 않은 작업이었습니다.

기존 매크로의 문제점 🤔

AI에게 코드 점검을 부탁했더니 공통적으로 "이런 이런점이 아쉽다. 이렇게 이렇게 바꿔보자" 라는 내용이 나오는 것을 확인할 수 있었습니다.

그 외에도 처음 이 VBA 코드를 만들때 말그대로 제 실력이 모자라서 구현하지 못했던 몇가지 기능들 또한 있어서 이 부분들도 추가해서 수정을 요청하고 티키타카로 수정했습니다.

대표적인 예로는 아래와 같은 예를 들 수 있을 듯 합니다.

1. 사용자 편의성 부족

  • 폰트 이름을 텍스트박스에 직접 입력해야 함 → 오타 가능성

  • 콤보박스를 사용했다면 훨씬 편했을 텐데...

기존 유저폼 :

자동 한국어 글꼴 - 스크린샷 미리보기 이미지

개선된 유저폼 :

2. 잦은 프로그램 튕김 현상 😱

' 기존 코드 예시
Set sShp = ActiveWindow.Selection.ShapeRange
txt_HFont.Value = sShp.TextFrame.TextRange.Font.NameFarEast
  • 아무것도 선택하지 않았을 때? → 튕김

  • 텍스트가 없는 도형 선택? → 튕김

  • 여러 개 선택? → 예상치 못한 동작

튕김 예시 :

3. 알 수 없는 변수명

Private Sub CommandButton1_Click()
Private Sub CommandButton2_Click()

나중에 코드를 보면 뭐가 뭔지 기억이 안 납니다...

바이브 코딩으로 개선 시작! 🎯

삽질 1: pptm 파일 직접 업로드

앞서 이야기 한 것처럼 ".pptm" 파일을 Claude에 업로드하고 "이 파일 분석해줘!"라고 했는데, 이건 실패 했습니다.

Claude는 pptm파일 내에 있는 VBA 코드를 직접 읽을 수 없었습니다.

해결책: 코드 복붙 전략

VBA 에디터에서 코드를 복사해서 붙여넣어 해결했습니다.

1. Alt + F11로 VBA 에디터 열기
2. 모듈/폼 코드 전체 선택 (Ctrl+A)
3. 복사 (Ctrl+C)
4. Claude에 붙여넣기

삽질 2 : UserForm의 딜레마 🎨

UserForm은 시각적 디자인이라 AI가 직접 만들어줄 수는 없었습니다.

이건 어쩔수 없이 내가 직접 그릴 수 밖에 없더라고요.

하지만, 완전히 맨땅에 헤딩은 아니었던 것이 Claude가 우째 저째 가이드 그림을 그려주더라고요. 이게 또 은근히 도움이 되었습니다.

Claude의 가이드 :

실제 UI :

※ 제가 누구 말을 잘 듣는 편은 아니어서 시키는 대로 하지는 않았지만,
그래도 필요한 개체들은 빠짐 없이 정렬할 수 있어 도움이 되었습니다.

AI의 공통 지적 포인트 📝

여러 매크로를 분석하면서 Claude가 공통적으로 지적한 내용들이 있었습니다:

1. 에러 처리 부족 (가장 중요!)

개선 전:

Set sShp = ActiveWindow.Selection.ShapeRange
txt_HFont.Value = sShp.TextFrame.TextRange.Font.NameFarEast

개선 후:

On Error GoTo E_Handler

' 선택 항목 확인
If ActiveWindow.Selection.Type <> ppSelectionShapes Then
    MsgBox "도형을 먼저 선택해 주세요.", vbExclamation, "알림"
    Exit Sub
End If

Set sShp = ActiveWindow.Selection.ShapeRange

If sShp.Count = 0 Then
    MsgBox "도형을 먼저 선택해 주세요.", vbExclamation, "알림"
    Exit Sub
End If

' ... 작업 수행

Exit Sub

E_Handler:
    MsgBox "오류가 발생했습니다." & vbCrLf & _
           "Error: " & Err.Description, vbCritical, "오류"

덕분에 에러로 튕기는 상황이 발생하더라도 튕기는 것이 아니라 진행이 안되는 이유, 사용시 유의할 점에대해 정확히 알려주니 상당히 도움이 되었습니다.

다만... 코드는 무지하게 길어지더군요.

사실 이게 정상이긴 하겠지만요...

2. 개체 이름 불명확

개선 전:

Private Sub CommandButton1_Click()
Private Sub CommandButton2_Click()
Dim SW, SH, Dia As Integer

개선 후:

Private Sub cmd_GetRefColor_Click()
Private Sub cmd_ApplyProperties_Click()
Dim slideWidth As Long, slideHeight As Long, diameter As Long

기능상 직접적인 개선이 되지는 않았는데, 나중에 코드를 읽어볼때 확실히 훨씬 읽기가 편했습니다.

진즉에 이런 습관을 들였었어야 했는데, 이제는 AI가 잘 해주니 꼭 습관을 들일 필요는 없을지도 모르겠다는 생각을 살짝 해 봤습니다.

실전 개선 사례 💡

사례 1: 폰트 통일 매크로

추가된 기능:

  • ✅ 문서 내 사용 중인 폰트 자동 수집

  • ✅ 콤보박스로 폰트 선택

  • ✅ 참조 도형 선택 시 자동으로 리스트 추가

  • ✅ 확인 메시지와 처리 결과 통계

' 문서 내 폰트 자동 수집
Private Sub CollectDocumentFonts()
    Dim dictFonts As Object
    Set dictFonts = CreateObject("Scripting.Dictionary")
    
    For Each oSlide In ActivePresentation.Slides
        For Each oShape In oSlide.Shapes
            If oShape.HasTextFrame = msoTrue Then
                fontName = oShape.TextFrame.TextRange.Font.NameFarEast
                If fontName <> "" And Not dictFonts.Exists(fontName) Then
                    dictFonts.Add fontName, Nothing
                End If
            End If
        Next oShape
    Next oSlide
    
    ' 콤보박스에 추가
    For Each fontKey In dictFonts.Keys
        cbo_HFont.AddItem fontKey
    Next fontKey
End Sub

기존 화면 :

변경된 화면 :

사례 2: 색상 일괄 변경 매크로

추가된 기능:

  • ✅ 채우기 색상 + 윤곽선 색상 동시 변경

  • ✅ 테마 색상도 RGB로 변환하여 처리

  • ✅ 표, 그룹 내부 도형까지 재귀 처리

  • ✅ 적용 범위 선택 (현재 슬라이드/전체)

핵심 로직:

' 참조 도형: 찾을 기준 (채우기 색상만)
' 대상 도형: 적용할 스타일 (채우기 + 윤곽선)

If Shp.Fill.ForeColor.RGB = refColor Then
    ' 채우기 변경
    Shp.Fill.ForeColor.RGB = tarColor
    
    ' 윤곽선도 변경 (옵션)
    If applyLine Then
        Shp.Line.ForeColor.RGB = tarLineColor
    End If
End If

기존 화면 :

변경된 화면 :

사례 3: 이미지 크롭 매크로

추가된 기능:

  • ✅ 비율 유지 크기 조정

  • ✅ 비율 맞춤 자동 크롭

  • ✅ 둥근 모서리 크기 조절

크롭 알고리즘:

If currentRatio > targetRatio Then
    ' 가로가 더 넓음 → 좌우 크롭
    fillHeight = targetHeight
    fillWidth = fillHeight * currentRatio
    cropH = (fillWidth - targetWidth) / 2
    
    Shp.PictureFormat.CropLeft = cropH
    Shp.PictureFormat.CropRight = cropH
Else
    ' 세로가 더 높음 → 상하 크롭
    fillWidth = targetWidth
    fillHeight = fillWidth / currentRatio
    cropV = (fillHeight - targetHeight) / 2
    
    Shp.PictureFormat.CropTop = cropV
    Shp.PictureFormat.CropBottom = cropV
End If

기존 화면 :

변경된 화면 :

예상치 못한 함정들 ⚠️

1. AI가 만든 코드도 에러가 있다!

Claude가 제안한 코드 중 일부는 실제로 작동하지 않았습니다:

' AI가 제안한 코드 (오류 발생)
Case msoLineRound  ' ← 이런 상수는 존재하지 않음!
    GetLineStyleName = "둥근점"

' 올바른 코드
Case msoLineRoundDot  ' ← 정확한 상수명
    GetLineStyleName = "둥근점"

교훈: 기능 하나하나 구현할 때마다 직접 테스트 필수!

2. PowerPoint의 특이한 동작

' 이미지의 LockAspectRatio는 기본적으로 True
' 하나의 값만 변경하면 자동으로 비율 유지
Shp.Width = 800  ' Height는 자동으로 조정됨

이런 PowerPoint만의 특성을 이해하고 코드를 짜야 했습니다.

아이콘 업그레이드 🎨

하는김에 기능만 업그레이드 하는게 아니라 아이콘도 바꿔 봤습니다.

기존의 추가기능에서는 MSO에서 제공하는 기본 아이콘만 사용했는데, 한계가 느껴졌습니다.

그래서 이건 ChatGPT에게 이미지 생성을 부탁했습니다.

파워포인트 VBA를 만들고 리본 메뉴에 해당 기능의 버튼을 추가했어. 각 기능별로 아이콘을 만들고 싶으니 다음의 8가지 기능들에 해당하는 각각의 64 by 64 사이즈 아이콘 이미지를 그려줘. 작은 아이콘으로 사용할 것이기 때문에 크기가 작아도 의미가 통하게 단순화된 심벌로 만들어줘. 1. icon 1 : 자동 페이지 번호 생성 - 정해진 규칙에 딸라 슬라이드에 메인 슬라이드/보조 슬라이드 구분에 따라 페이지 번호 매기는 기능 
2. icon 2 : 제목 위치 통일 - 슬라이드의 제목 글상자 위치가 제각각 일때 같은 위치로 통일해 주는 기능 
3. icon 3 : 폰트 통일 - 슬라이드 안에 여러 폰트가 사용되었을때 같은 폰트로 통일시켜주는 기능 
4. icon 4 : 찾아 강조 - 슬라이드 안에 있는 특정 단어를 찾아서 굵게/밑줄/기울임체 등으로 키워드를 강조하는 기능 
5. icon 5 : 위치/크기 복분 - 특정 이미지의 위치와 크기 정보를 복사했다가 지정 이미지에 적용하는 기능 
6. icon 6 : 이미지 편집 - 여러 이미지를 한번에 둥글게 자르거나 둥근 사각형 모양으로 자르거나 슬라이드 좌우 균일한 간경으로 자동 배치하는 기능 
7. icon 7 : 색깔통일 - 슬라이드 내에 있는 특정 색깔의 도형을 모두 원하는 색으로 한번에 변경하는 기능 
8. icon 8 : 순서도 편집 - 순서도가 그려져 있을때 내가 원하는 형태로 수정 보완하는 편의 기능. 선을 굵게/연하게하는 기능, 직선 화살표를 꺽은선 화살표로 바꾸는 기능 등의 소소한 기능 지원이 됨

결과물을 받아서 매크로에 적용하니 훨씬 전문적으로 보였습니다!

만들어진 아이콘이 적용된 리본메뉴는 다음과 같습니다.

기존 리본 메뉴 :

수정 리본 메뉴 :

안내 메시지 딜레마 💬

개선 과정에서 AI는 모든 작업에 확인/완료 메시지를 추가했습니다:

' 속성 가져오기 완료
MsgBox "속성을 가져왔습니다." & vbCrLf & _
       "Left: " & txtL.Value & vbCrLf & _
       "Top: " & txtT.Value & vbCrLf & ...

' 폰트 설정 완료  
MsgBox "참조 도형 속성이 설정되었습니다." & vbCrLf & ...

' 색상 변경 전 확인
MsgBox "색상을 일괄 변경하시겠습니까?" & vbCrLf & ...

처음엔 좋았지만 실제 사용해보니 메시지가 너무 많아서 오히려 작업 흐름이 끊겼습니다.

최종 결정:

  • ✅ 유지: 에러 메시지, 중요한 확인 메시지

  • ❌ 제거: 단순 완료 안내 메시지

이 부분은 공부를 겸하여 코드도 보면서 수작업으로 불필요한 메시지를 모두 주석 처리했습니다.

최종 결과물 🎉

개선된 매크로 모음 (2026 버전) : 아래 링크에서 다운로드 가능합니다.

https://drive.google.com/drive/folders/1irYr8qHOkCPtvgEaePHXVfw7qm0NXIXx?usp=sharing

설치 및 사용 방법은 이전버전과 동일합니다.

배운 점과 팁 📚

1. AI 활용 전략

효과적인 방법:

  • 코드를 직접 복붙하기

  • 구체적인 개선 요구사항 제시

  • 단계별로 기능 추가

비효율적인 방법:

  • 바이너리 파일 업로드

  • 한 번에 모든 기능 요청

  • 테스트 없이 코드 통합

2. 코드 품질 체크리스트

□ 에러 처리가 되어 있는가?
□ 변수명이 명확한가?
□ 사용자 입력값을 검증하는가?
□ 확인 메시지가 적절한가? (너무 많지 않은가?)
□ 처리 결과를 피드백하는가?
□ 빈 핸들러가 없는가?
□ 주석이 필요한 곳에 있는가?

3. UserForm 디자인 팁

AI가 제공하는 가이드를 활용하면 효율적입니다:

1. 컨트롤 이름과 타입 명확히 정리
2. 중요 속성 리스트업
3. 레이아웃 스케치 요청
4. 직접 구현 후 테스트

4. 실전 테스트의 중요성

AI 코드 활용 프로세스:

1. AI에게 코드 요청
2. 코드 이해 및 검토
3. 작은 기능부터 테스트
4. 에러 발견 시 즉시 수정
5. 전체 통합 테스트

마치며

AI의 도움을 받아 반나절만에 여러 매크로를 대대적으로 개선할 수 있었습니다.

혼자 했다면... 아마 귀찮아서 안했을 것 같아요.

하지만 AI가 모든 것을 해주진 않습니다. 오히려:

  • 코드의 올바른 동작 검증

  • 실제 사용성 판단

  • 최종 품질 관리

은 여전히 사람의 몫입니다.

또한 VBA의 유저폼이나 Office Ribbon X Editor 처럼 사용자 유저 인터페이스를 개선하고 편의성을 증진 시키는 영역중에 내 손으로 직접 해야만 하는 일도 꽤 많이 있었습니다.

AI는 분명 훌륭한 페어 프로그래밍 파트너입니다.

단순 작업은 빠르게 처리하고, 우리는 창의적인 부분과 품질 관리에 집중할 수 있죠.

하지만, 그 매커니즘을 이해하고 있어야 한다는 것, 중간 중간 필수 점검은 직접 해야만 한다는 것... 이점은 염두에 둬야 할 것 같습니다.

여러분도 묵혀둔 매크로가 있다면, AI와 함께 리팩토링에 도전해보세요! 🚀

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요