프린터 종류에서 .pdf 인쇄 드라이버를 선택하지 않고 엑셀내의 인쇄 옵션을 사용하여 활성화된 시트를 .pdf 파일로 출력하는 기능. 두 가지의 인쇄 방식에 약간의 차이가 있음을 알게됨.
동영상의 순서별 설명 :
- 매크로 파일을 연다.
- 보안설정을 매크로 가능하도록 선택
- 인쇄 미리보기를 하면 총 6개의 페이지가 있다.
- 매크로 버튼을 클릭하여 매크로 실행하면 .pdf 파일이 생성된다.
- .pdf 파일을 열면 6개의 페이지가 인쇄된 것을 알 수 있다.
100% 확실하지는 않지만 OpenAfterPublish:=True 로 설정 시 에러가 발생하는 것으로 판단되어 이를 비활성화 함(이후 에러 발생하지 않음). 전체 인쇄를 원하지 않으면 From:=1, to:=totalPages 에서 출력을 원하는 페이지를 입력하면 된다. 하지만 동일한 매크로 버튼을 클릭해도 어떨 때에는 2페이지만 인쇄되거나 6페이지 모두 인쇄되는 등 버그가 있다. 엑셀의 그림 출력 및 인쇄관련 버그는 여전한 듯.
Option Explicit
Sub print_As_PDF()
Dim strPath As String '파일 경로를 넣을 변수
Dim strName As String '파일 이름을 넣을 변수
Dim fName As String '파일경로 포함한 파일이름 넣을 변수
Dim hpBreaks As Long '가로 페이지 나누기 개수 넣을 변수
Dim vpBreaks As Integer '세로 페이지 나누기 개수 넣을 변수
Dim totalPages As Long '전체 페이지 개수를 넣을 변수
Application.ScreenUpdating = False '화면 업데이트 (일시)정지
With ActiveSheet
hpBreaks = .HPageBreaks.Count + 1 '가로 페이지 나누기 개수를 변수에 넣음
vpBreaks = .VPageBreaks.Count '세로 페이지 나누기 개수를 변수에 넣음
totalPages = hpBreaks * vpBreaks '전체 페이지 개수를 변수에 넣음
strPath = ActiveWorkbook.Path & "\" '파일의 경로를 변수에 넣음
strName = Split(ActiveWorkbook.Name, ".")(0) '파일 이름을 변수에 넣음
fName = strPath & strName & "_" & .Name & ".pdf" '파일경로 포함한 파일이름 넣을 변수
If Len(Dir(fName)) <> 0 Then '이미 파일이 존재한다면
If MsgBox("동일한 파일이 존재합니다. 덮어쓸까요?", _
vbYesNo + 64, "파일이름 중복") = vbNo Then '덮어쓰기 여부 메시지 출력
Exit Sub '매크로 종료
End If
End If
On Error Resume Next
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fName, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=True, From:=1, to:=totalPages, OpenAfterPublish:=False
'파일을 .pdf 파일로 출력
End With
End Sub
인쇄 옵션(현재시트만 인쇄할지 또는 시트 전체를 인쇄할지 등을 설정)은 아래와 같이 설정하면 됨.