메뉴
실무 위키VBA 코드Page_Setup

Page_Setup

Sub

지정한 시트의 머릿말·꼬릿말·여백·용지 방향 등 인쇄 페이지 설정을 한 번에 지정하는 VBA 명령문입니다.

Page_Setup 코드 미리보기
구문 Page_Setup ws, [LHead], [RHead], [LFoot], [RFoot], [eMargin], [HFit], [VFit], [HCenter], [VCenter], [eOrient], [eSize]
인수구분 형식 설명
ws 필수 Worksheet
페이지 레이아웃 설정을 변경할 시트입니다.
LHead 선택 String
좌측에 들어갈 머릿말입니다. 기본값은 빈 문자열입니다.
RHead 선택 String
우측에 들어갈 머릿말입니다. 기본값은 일자 / 시간입니다.
LFoot 선택 String
좌측에 들어갈 꼬릿말입니다. 기본값은 "본 페이지의 무단복제를 금합니다." 입니다.
RFoot 선택 String
우측에 들어갈 꼬릿말입니다. 기본값은 "1 / N 페이지" 입니다.
eMargin 선택 ePrintMargin
용지 여백을 결정합니다. 기본값은 xlNarrow(좁은여백)입니다.
xlNone, xlNarrow, xlNormal, xlWide 중 하나를 지정합니다.
HFit 선택 Boolean
한 페이지 모든 행 맞춤 설정 여부입니다. 기본값은 TRUE 입니다.
VFit 선택 Boolean
한 페이지 모든 열 맞춤 설정 여부입니다. 기본값은 FALSE 입니다.
HCenter 선택 Boolean
가운데 정렬 여부입니다. 기본값은 TRUE 입니다.
VCenter 선택 Boolean
중앙 정렬 여부입니다. 기본값은 FALSE 입니다.
eOrient 선택 XlPageOrientation
용지 방향을 결정합니다. 기본값은 xlPortrait(세로방향)입니다.
eSize 선택 ePaperSize
용지 크기를 결정합니다. 기본값은 xlA4 입니다.
xlA4, xlA3, xlLetter, xlA5 중 하나를 지정합니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · Page_Setup
Public Enum ePrintMargin
xlNone = 0
xlNarrow = 1
xlNormal = 2
xlWide = 3
End Enum
Public Enum ePaperSize
xlA4 = 9
xlA3 = 8
xlLetter = 1
xlA5 = 11
End Enum
Function getPrintMargin(eValue As ePrintMargin) As Variant
'// 설정된 eNum 값으로 페이지 여백설정을 위한 값을 배열로 나열합니다.
Select Case eValue
Case 0
getPrintMargin = Array(0.05, 0.05, 0.05, 0.05, 0.1, 0.1)
Case 1
getPrintMargin = Array(0.25, 0.25, 0.75, 0.75, 0.3, 0.3)
Case 2
getPrintMargin = Array(0.7, 0.7, 0.75, 0.75, 0.3, 0.3)
Case 3
getPrintMargin = Array(1, 1, 1, 1, 0.5, 0.5)
End Select
End Function
Sub Page_Setup(ws As Worksheet, Optional LHead As String = "", Optional RHead As String = "&D / &T", _
Optional LFoot As String = "본 페이지의 무단복제를 금합니다.", Optional RFoot As String = "&P / &N 페이지", _
Optional eMargin As ePrintMargin = xlNarrow, _
Optional HFit As Boolean = True, Optional VFit As Boolean = False, _
Optional HCenter As Boolean = True, Optional VCenter As Boolean = False, _
Optional eOrient As XlPageOrientation = xlPortrait, Optional eSize As ePaperSize = xlA4)
Dim pSetup As String
Dim varMargin As Variant
Dim lngOrient As Integer
'// 인쇄설정 업데이트 중단 (속도증가)
Application.PrintCommunication = False
'// 인쇄여백값을 받아옵니다.
varMargin = getPrintMargin(eMargin)
'// 인쇄용지 방향을 설정합니다.
If eOrient = xlPortrait Then
lngOrient = 1
Else
lngOrient = 2
End If
'// ExecuteExcel4Macro 의 Page.Setup 명령문 실행을 위한 문구를 입력합니다.
Head = """&L" & LHead & "&R" & RHead & """" '// 페이지 머릿말입니다.
Foot = """&L" & LFoot & "&R" & RFoot & """" '// 페이지 꼬릿말입니다.
pLeft = varMargin(0) '// 왼쪽여백
pRight = varMargin(1) '// 오른쪽여백
Top = varMargin(2) '// 윗여백
Bot = varMargin(3) '// 아래여백
Head_margin = varMargin(4) '// 머릿말여백
Foot_margin = varMargin(5) '// 꼬릿말여백
Hdng = 0 '// 행/열반복 출력여부 0 = 반복출력안함 1 = 반복출력
Grid = False '// 눈금선출력여부
Notes = False '// 메모출력여부
H_cntr = HCenter '// 가운데정렬
V_cntr = VCenter '// 중앙정렬
Orient = lngOrient '// 문서방향, 1 = 세로 2 = 가로
Paper_size = eSize '// 용지크기
Pg_num = 1 '// 페이지 시작번호
Pg_order = 1 '// 페이지번호 순서, 1 = 위-아래-우 2 = 좌-우-아래
Quality = "" '// 인쇄품질 (dot-per-inch로 입력) (공백 = 자동)
bw_cells = False '// 흑백인쇄여부, TRUE = 글자/테두리 검정,배경 흰색 FALSE = 색깔
pScale = 100 '// 축소/확대비율 또는 TRUE (Fit to Page)
'// 여백을 없음으로 설정할 경우 머릿말/꼬릿말을 삭제하여 인쇄영역과 겹치지 않도록 합니다.
If eMargin = xlNone Then
Head = """"""
Foot = """"""
End If
'// ExecuteExcel4Macro 명령문을 실행합니다.
pSetup = "PAGE.SETUP(" & Head & ", " & Foot & ", " & pLeft & ", " & pRight & ", " & Top & ", " & Bot & ", "
pSetup = pSetup & Hdng & ", " & Grid & "," & H_cntr & "," & V_cntr & "," & Orient & ","
pSetup = pSetup & Paper_size & "," & pScale & ","
pSetup = pSetup & Pg_num & "," & Pg_order & "," & bw_cells & "," & Quality & ","
pSetup = pSetup & Head_margin & "," & Foot_margin & "," & Notes & ")"
Application.ExecuteExcel4Macro pSetup
'// ExecuteExcel4Macro에서는 '한 페이지에 행/열 맞추기' 기능이 지원되지 않습니다.
'// 따라서 시트의 PageSetup 속성으로 '페이지 행/열 맞추기 기능을 설정합니다.
With ws.PageSetup
If HFit = True Then
.FitToPagesWide = 1
Else
.FitToPagesWide = False
End If
If VFit = True Then
.FitToPagesTall = 1
Else
.FitToPagesTall = False
End If
End With
'// 인쇄설정 업데이트
Application.PrintCommunication = True
End Sub

활용 예제

현재 시트를 A4 가로 방향으로 설정
Sub 인쇄설정_가로()
Page_Setup ActiveSheet, eOrient:=xlLandscape, eSize:=xlA4
End Sub
머릿말·꼬릿말을 지정해 보고서 시트 설정
Sub 보고서_인쇄설정()
Page_Setup ThisWorkbook.Worksheets("보고서"), _
LHead:="2026년 상반기 매출 보고서", _
eMargin:=xlNormal, _
HFit:=True, HCenter:=True
End Sub

안내사항

명령문을 실행하려면 ePrintMargin·ePaperSize Enum 선언과 보조 함수 getPrintMargin 을 같은 모듈에 함께 붙여넣어야 합니다.
한 페이지 행/열 맞춤은 ExecuteExcel4Macro 에서 지원되지 않아 시트의 PageSetup 속성으로 설정합니다.
PageSetup 속성을 많이 변경하면 명령문 동작 속도에 큰 영향을 주므로 주의합니다.
댓글 20
5 (11개 평가)
Young
Young 2020.04.21 07:22
안녕하세요! 항상 좋은 수업 넘 감사드립니다.  :)
위 수업 관련해서 질문 드립니다 ^^
추출된 PDF를 바탕화면이 아닌 특정폴더 (예를 들어 C:\ '저장폴더' 폴더) 에 저장하는 경우는 어떻게 코드를 바꿔야 할까요?

다른분의 커뮤니티 질문에 오빠두님이 답변 주신것 보고,

If SavePath="" Then SavePath= GetDesktopPath 를
If SavePath="" Then SavePath="C:\Users..\Desktop\저장폴더" 로 변경해서 적용했는데 다른 질문자님처럼 저도 제가 지정한 폴더명이 새로 생성된 파일이름앞에 붙고(예: 저장폴더_오빠두 2019년 8월 급여명세서)
새로 생성된 파일은 기존처럼 바탕화면에 저장됩니다.

혹시 SubModule에서 GetDesktopPath /function을 수정해야 할까요? 
혹여 다른 방법이 있다면 조언 부탁드립니다 :)
오빠두엑셀
오빠두엑셀 작성자 2020.04.21 14:20
안녕하세요?
If SavePath="" Then SavePath="C:\Users..\Desktop\저장폴더"

를 아래와 같이 변경해보시겠어요? 폴더경로 뒤에 "\" 를 추가해보시기 바랍니다.^^
If SavePath="" Then SavePath="C:\Users..\Desktop\저장폴더\"

답변이 도움이 되셨길 바랍니다.
감사합니다.
Young
Young 2020.04.21 21:39
간단한 거지만 엄청 중요한거였네요! 앞으로도 잘 써먹을수 있도록 해볼게요. 감사합니다! :)
그리고
그리고 2020.04.30 09:48
vba 어렵고도 재미있네요 좋은 강의 감사합니다.
초보두
초보두 2020.08.03 14:42
안녕하세요! 엑셀관련해서 모르는 것이있으면 오빠두를 찾게 되네요..
그만큼 유익한 강의가 많다는 것이겠죠!!

한가지 질문이 있는데요...
인쇄 옵션중에 <선택영역 인쇄 - 한페이지에 시트 맞추기> 가 있는데,
한페이지에 시트 맞추기를 하려면 어떻게 해야 하는 것인가요?
HFit, VFit 둘 다 True로 했더니 페이지가 이상해지더라구요....

조언 부탁드립니다
오빠두엑셀
오빠두엑셀 작성자 2020.08.03 22:38
안녕하세요?^^
한페이지에 시트 맞추기 = 행 또는 열로 페이지 맞춤과 동일합니다.
세로로 긴 문서를 가로용지에 인쇄해야 할 경우 VFit을 True로 설정,
가로로 긴 문서를 세로용지에 인쇄해야 할 경우 HFit 을 True로 설정하시면 됩니다.
본 명령문에서 사용한 ExecuteExcel4Macro 함수는 한페이지에시트맞추기 기능을 따로 지원하지 않습니다.:)
답변이 도움이 되셨길 바랍니다.
Lckrhdrtght
Lckrhdrtght 2020.12.15 15:11
머릿말 꼬릿말 명령문을 지워도 계속 포함되서 출력되는 경우는 어떻하면 좋을까요^^?
페이지 넘버라던지 포함이 되면 안되는데 ..
오빠두엑셀
오빠두엑셀 작성자 2020.12.16 03:38
안녕하세요.
일부 사내 보안 프로그램 등으로 출력물에 머릿말/꼬릿말이 자동으로 설정될 경우 그럴 수 있습니다.
엑셀의 머릿말/꼬릿말 설정에서 머릿말/꼬릿말을 지운 뒤 인쇄를 했을 때, 머릿말/꼬릿말이 자동으로 설정된다면 외부 프로그램으로 인한 문제이므로 VBA로는 해결이 불가능합니다.
답변이 도움이 되셨길 바랍니다.
세무공주
세무공주 2020.12.31 01:50
좋은 강의 감사합니다.
질문^^
만약 2페이지 문서인데 1페이지 또는 2페이지만 PDF저장 하려면 .. 어떻게 해야 할까요?
오빠두엑셀
오빠두엑셀 작성자 2021.01.03 14:58
안녕하세요.
어떤 명령문을 사용하냐에 따라 다릅니다.^^
PrintOut 함수로 인쇄할 경우 Pages 인수를 변경해보세요.
Application.PrintOut FileName:="", Pages:="2,6-10"
또는 직접 범위를 지정해서 인쇄하는 방법도 있습니다. 아래 영상강의를 참고해보세요.
https://www.oppadu.com/%ec%97%91%ec%85%80-pdf-%ec%9e%90%eb%8f%99-%ec%a0%80%ec%9e%a5-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8/
dayun
dayun 2021.11.30 09:49
안녕하세요, 강의 잘 보고 있습니다. 다른게 아니라 혹시 엑셀 워크시트 열때, 확대/축소비율을 고정 값으로 사용하는 방법이 있는지 문의드립니다.
오빠두엑셀
오빠두엑셀 작성자 2021.12.05 20:52
안녕하세요.
매크로를 사용하면 가능합니다. WorkBook_Open 이벤트로 확대/축소비율을 지정해주세요.
매크로를 사용하지 않을 경우, 최종 저장하기 전 원하시는 배율을 맞춘 후 저장해주시면 됩니다 ^^
0717
0717 2022.07.28 13:21
안녕하세요~ imagelookup 함수와 PDF전환 메크로를 같이 쓰려고 공부중인데 Notes = True로 설정해봐도 pdf에 이미지가 안나타나서요! 혹시 메크로 사용으로 PDF출력시 메모가 '페이지에표시된대로' 로 설정하려면 어떻게 하면 될까요?
오빠두엑셀
오빠두엑셀 작성자 2022.07.29 15:50
안녕하세요.
Notes = True는 메모를 넣는 설정이고 메모를 표시하는 것과는 별개입니다.
메모 표시 설정은
PrintErrors = xlPrintErrorsDisplayed
로 PageSetup 속성을 바꿔서 사용하면 됩니다.
관련 설명은 아래 링크를 확인해보세요.
https://docs.microsoft.com/en-us/office/vba/api/excel.pagesetup.printerrors
영
2022.10.20 03:15
머리글의 글씨 크기 설정하는 함수가 궁금합니다. centerhead.font.size = 40 이런 식으로 하면 변수가 지정되지 않았다고 뜹니당...
오빠두엑셀
오빠두엑셀 작성자 2022.10.23 18:57
안녕하세요.
머릿글/꼬릿글 설정은 아래 링크를 참고해보세요..
https://stackoverflow.com/questions/67238826/excel-vba-change-footer-font-and-font-size
ActiveSheet.PageSetup.LeftFooter = "&""Arial""&10" & Range("$G$4").Value
가자가자가자
가자가자가자 2023.08.15 12:05
안녕하세요, 좋은 강의 감사드립니다.
PDF 저장폴더 관련하여, 해당 폴더에 저장하고 싶습니다.
예를 들면, 수많은 폴더가 있습니다.
'A업체 폴더' 에서 엑셀 파일을 실행한 의 경우, 제가 별도로 폴더저장 경로를 지정하지 않더라도, 자동으로 'A업체 폴더' 해당폴더의 경로에 지정되었으면 좋겠습니다.
'B업체 폴더' 에서 실행한 엑셀 파일은 'B업체 폴더' 에 저장되었으면 좋겠습니다.
VBA상에서 직접 주소를 입력하는것이 아닌, 실행한 엑셀파일의 폴더로 저장이 되었으면 좋겠습니다.
마치 매크로 없이, PDF 를 인쇄를 실행하면, 폴더 지정을 하지 않더라도, 해당폴더에 저장되듯이 자동으로 해당폴더에 지정되면 좋겠습니다.
엑셀VBA에 이런 기능도 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2023.08.21 18:56
네 가능합니다.
선택한 파일의 상위경로를 받아서 저장 경로로 설정하도록 코드를 작성해보세요.
https://stackoverflow.com/questions/418622/find-the-directory-part-minus-the-filename-of-a-full-path-in-access-97
강민준🤗
강민준🤗 2024.08.11 12:44
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료