본문 바로가기
아주 미비한 코딩/vba

VBA - 버튼 하나로 PDF로 출력/저장하는 기능 만들기

by 찌노오 2024. 1. 10.

 

 

 

 

배경

엑셀(excel)를 간단한 가계부 용도나, 매 번 바뀌는 데이터를 기록하는 용도(e.g. 인보이스, 견적서)로 사용하는 경우가 있다.

 

종이와 달리 과거 데이터까지 전부 저장한다고 하더라도 크게 제약이 있는 건 아니지만, 그래도 다른 매체로 전달할 때는 PDF 파일로 전달해야 하는 경우가 있어서 간단하게 VBA 코드를 남겨두는 목적으로 정리해봤다.

 

PDF 출력 및 저장하기

1. 스프레드 시트 준비

먼저 스프레드 시트를 하나 준비해준다.

오늘 실습할 시트는 엑셀에서 기본적으로 제공하는 문서 양식 중 하나인 '개인 월별 예산' 파일이다.

 

개인 가계부 용도로 실제로 써도 좋은 기본 제공 양식

 

2. 인쇄 범위 설정

VBA코드로 미리 작성하기 전에 미리 인쇄범위를 설정해준다.

상단 메뉴 > 페이지 레이아웃에서 인쇄영역을 설정한다.

 

 

 

인쇄미리보기를 통해 확인 해준다.

 

3. VBA 코드 작성

VBA 편집기를 열어서 모듈을 하나 만들어 준 뒤, 코드를 작성한다.

 

1️⃣ 파일 저장경로, 파일명 변수 및 정의

PDF 저장 후 파일을 저장할 경로와 파일명을 정의하고 변수로 설정해준다.

 

Dim filePath As String
Dim fileName As String

' 저장할 파일 경로 및 이름 설정
filePath = ThisWorkbook.Path '원하는 경로로 수정 / "C:\경로\"로 절대경로로 설정도 가능
fileName = "개인_월별_예산.pdf" ' 원하는 파일명으로 수정

 

파일 경로는 절대, 상대경로 모두 가능하지만 파일을 어디에 둘지 결정하기 어렵다면 해당 워크북이 있는 경로를 복사해서 변수(ThisWorkbook.Path)에 담아두면 PDF 파일 출력도 해당 경로로 둘 수 있다.

 

 

2️⃣ PDF로 저장하기

 

' PDF로 저장
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
    fileName:=filePath & fileName, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True

 

해당 메서드에 대해 간단하게 설명하면 다음과 같다.

 

Quality (품질):

  • xlQualityStandard: PDF 파일의 품질을 나타내는 매개변수. 이 경우에는 표준 품질로 설정되어있다. 

IncludeDocProperties (문서 속성 포함):

  • True 또는 False로 설정 가능. True로 설정하면 PDF에 문서 속성이 포함되고, False로 설정하면 포함되지 않는다.

IgnorePrintAreas (인쇄 영역 무시):

  • True 또는 False로 설정 가능. True로 설정하면 인쇄 영역이 무시되고, 전체 시트가 PDF로 내보내진다. False로 설정하면 현재의 인쇄 영역만이 PDF로 내보내진다.
  • 여기서는 인쇄 영역을 처음부터 설정했으니 False로 설정해주었다.

OpenAfterPublish (내보낸 후에 열기):

  • True 또는 False로 설정 가능. True로 설정하면 PDF 파일이 내보내진 후에 자동으로 열린다. False로 설정하면 열리지 않는다.
  • 보통 PDF 저장하면 디폴트 값이 True이다.

 

 

 

3️⃣ 메시지 박스로 PDF 저장 알려주기

 

아주 간단하지만 PDF 저장이 완료되었음을 알리는 메시지 박스를 만들어준다.

코드 가장 마지막에 둠으로서 혹시 오류가 발생하면 해당 메시지도 뜨지 않는다.

 

MsgBox "PDF로 저장되었습니다.", vbInformation

 

#️⃣ 최종 코드

Sub SavePDF()
    Dim filePath As String
    Dim fileName As String

    ' 저장할 파일 경로 및 이름 설정
    filePath = ThisWorkbook.Path '원하는 경로로 수정 / "C:\경로\"로 절대경로로 설정도 가능
    fileName = "개인_월별_예산.pdf" ' 원하는 파일명으로 수정

    ' PDF로 저장
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        fileName:=filePath & fileName, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

    MsgBox "PDF로 저장되었습니다.", vbInformation
End Sub

 

 

완성된 코드를 컨트롤 박스에 매크로 지정해주면 작동된다.

작성한 코드를 매크로 지정한다.

 

 

 

4.  최종 동작

해당 버튼을 클릭하면,

해당 시트를 처음에 설정한 인쇄범위에 맞춰 PDF 출력하고 바로 열어준다.

 

 

 

다운로드

❤️ 다운로드 받기 전에 하트와 댓글 부탁드려요!❤️

월별 개인 예산_PDF출력 추가.xlsb
0.06MB

 

 

 

 

반응형

댓글