반응형
실무 자동화 (11편): 조건에 맞는 데이터만 "PDF로 자동 변환" 하여 저장하기
안녕하세요, 물류 현장의 비효율을 코딩으로 정복하는 '칵칵'입니다. ☕
거래처별로 명세서를 보내거나 일일 보고서를 공유할 때, 엑셀 파일을 그대로 보내기보다 내용 수정이 불가능한 PDF 형식을 선호하는 경우가 많습니다. 매번 [다른 이름으로 저장] → [PDF 선택] → [파일명 입력]... 이 과정을 50번 반복하고 계신가요? 오늘은 클릭 한 번으로 모든 데이터를 PDF로 굽고 폴더에 정돈하는 VBA 코드를 공개합니다.
🛠 PDF 자동 저장 VBA 코드
Sub SaveAsPDF()
Dim ws As Worksheet
Dim savePath As String
Dim fileName As String
Set ws = ThisWorkbook.ActiveSheet
' 1. 저장할 경로 설정 (본인 폴더에 맞게 수정 필수!)
savePath = "C:\Users\Desktop\Report_PDF\"
' 2. 파일명 설정 (예: A1셀의 제목 + 오늘 날짜)
fileName = ws.Range("A1").Value & "_" & Format(Date, "yyyymmdd") & ".pdf"
' 3. PDF 변환 및 저장 실행
On Error Resume Next
ws.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=savePath & fileName, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
If Err.Number = 0 Then
MsgBox "PDF 저장이 성공적으로 완료되었습니다!"
Else
MsgBox "저장 경로가 틀렸거나 오류가 발생했습니다."
End If
On Error GoTo 0
End Sub
💡 코드 핵심 해설 (실무 포인트)
- ExportAsFixedFormat: 엑셀 시트를 PDF나 XPS 같은 고정 형식으로 내보내는 핵심 명령입니다.
- Format(Date, "yyyymmdd"): 파일명 뒤에 자동으로 오늘 날짜를 붙여주어 파일 관리를 용이하게 합니다.
- IgnorePrintAreas:=False: 시트 내에 설정된 '인쇄 영역'만 PDF로 저장하게 합니다. 영역 밖의 불필요한 메모는 무시됩니다.
⚠️ 칵칵의 포인트 해설: 여기서 실수하면 저장 안 됩니다!
- 실수 1: 폴더 미생성 -
savePath에 적은 폴더가 실제로 존재해야 합니다. 폴더가 없으면 매크로는 파일을 만들지 못하고 에러를 뿜습니다. - 실수 2: 인쇄 영역 미설정 - 인쇄 영역을 잡지 않고 돌리면 시트 전체가 엉뚱한 비율로 PDF화 될 수 있습니다. 실행 전 반드시 **[인쇄 영역 설정]**을 완료하세요.
- 실수 3: 파일명 금지 문자 -
fileName으로 쓸 셀(A1 등)에/ \ : * ? " < > |기호가 있으면 저장이 안 됩니다. 특수문자를 제거하세요! - 실수 4: 같은 이름의 파일 열림 - 이미 저장된 PDF 파일이 열려 있는 상태에서 매크로를 또 실행하면 '접근 권한 에러'가 발생합니다.
다음 엑셀 이야기 예고: 「엑셀 VBA (12편): 폴더 내의 수많은 PDF 파일 이름을 엑셀 데이터로 한 번에 변경하기」
반응형
'코딩으로 시간 벌기 > 엑셀 VBA' 카테고리의 다른 글
| 실무 자동화 (13편): 1시간 노가다를 1초로 - "여러 파일 하나로 합치기" (통합 매크로) (0) | 2026.04.07 |
|---|---|
| 실무 자동화 (12편): 클릭 한 번으로 "거래처별 대량 메일 자동 발송" (Outlook 연동) (0) | 2026.04.04 |
| 실무 자동화 (10편): 조건에 맞는 데이터만 골라 시트별로 자동 분리하기 (0) | 2026.03.26 |
| 실무 자동화 (9편): 1시간 노가다를 1초로 - 여러 파일 하나로 합치기 (0) | 2026.03.24 |
| 여덟 번째 이야기: 수천 줄 데이터에서 '원하는 것'만 쏙 뽑아내기 (0) | 2026.03.22 |
