EXCEL - VBA

인쇄관련 PageSetup(페이지 설정) VBA

별동산 2023. 8. 23. 08:56
반응형

8. 그 밖의 설정

이 글에서 PrintOut 메소드에 대해 알아봤는데,

좀 더 상세한 페이지 설정에 대해 알아보겠습니다.

 

엑셀VBA페이지설정.xlsm
0.10MB

 

 

 

 

가. 워크시트에서 설정하기

메뉴로 보면 파일 - 인쇄를 누르면 아래 화면이 나오는데,

여기서 페이지 설정을 누르면 나오는

 

페이지 설정 창에서 하는 것을 VBA로 구현하는 것인데,

 

'반복할 행과 열'은 위 화면에서 설정할 수 없고, 페이지 레이아웃 탭의 인쇄 제목 명령을 누르면 나오는 페이지 설정 화면의 시트 탭에서 설정해야 합니다.

 

 

나. VBA로 구현하기

Sub 인쇄6()

    Range("a1").Select
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .PaperSize = xlPaperA4          '용지 규격 A4
        
        '인쇄 영역 설정(A1셀에서 Shift+Ctrl+End룰 눌러 A1셀부터 마지막셀까지 범위 설정)
        .PrintArea = Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Address
        
        .Orientation = xlPortrait       '세로 방향, 가로 방향은 xlLandscape
        .PrintTitleRows = "$1:$1"       '반복할 행 지정
'        .PrintTitleColumns = "$A:$B"    '반복할 열 지정
        .CenterHorizontally = True      '가로 가운데 맞춤
        .CenterVertically = False       '세로 가운데 맞춤
        .BlackAndWhite = False          '컬러 인쇄, True는 그레이스케일
        .Zoom = False                   '확대/축소 배율 100%. 자동 맞춤하려면 False
        .FitToPagesWide = 1             '한 페이지에 모든 열 맞추기
        .FitToPagesTall = 0             '한 페이지에 모든 행 맞추기
    End With

    Application.PrintCommunication = True
    ActiveSheet.PrintOut ActivePrinter:="Microsoft Print to PDF", preview:=True
    
End Sub

 

(1) Range("a1").Select

A1셀을 선택하는 것입니다.

뒤에서 인쇄 영역 설정할 때 사용합니다.

 

(2) Application.PrintCommunication = False

이 구문이 없을 경우 뒤에서 나올 FitToPagesWide 또는 FitToPagesTall에서 에러가 나서 추가해야 합니다.

 

아래와 같이 Application.PrintCommunication = False 줄에 주석을 설정하고 실행하니 'FitToPagesTall 속성을 설정할 수 없습니다'란 에러 메시지가 표시됩니다.

 

PrintOut Method 전에 Application.PrintCommunication을 True로 바꿔야 설정이 반영됩니다.

True 구문이 없으면 한 단계씩 늦게 설정이 반영됩니다.

 

(3) With ActiveSheet.PageSetup ~ End With

인수 분해처럼 공통되는 부분을 With 다음에 쓰고,

공통되는 부분을 제외한 부분을

.PaperSize = xlPaperA4 식으로 설정합니다.

이것은 ActiveSheet.PageSetup.PaperSize = xlPaperA4을 간략히 한 것입니다.

 

이렇게 하면 코드가 간단해지는 장점이 있으며,

End With로 끝냅니다.

 

(4) 용지 규격

.PaperSize = xlPaperA4

용지 규격을 A4로 설정하는 것입니다. A4를 B4, A3 등으로 바꾸면 됩니다.

 

(4) 인쇄 영역 설정

.PrintArea = Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Address

인쇄 영역을 "A1:H1857"로 설정하면 데이터가 변경됐을 때 수정해야 하므로

위와 같이 마지막 셀을 찾는 이동 옵션을 사용해서 범위를 설정할 수 있습니다.

 

현재 셀에서 마지막셀까지 범위를 설정하는단축키는 Shift + Ctrl + End 키입니다.

 

(5) 인쇄 방향

.Orientation = xlPortrait 

인쇄 방향을 세로로 하는 것이고,

가로 방향으로 하려면 xlLandscape라고 하면 됩니다.

 

(6) 반복할 행 또는 열

.PrintTitleRows = "$1:$1"  : 반복할 행을 1행으로 지정하는 것입니다.

PrintTitleColumns = "$A:$B"  : A와 B열을 반복할 열로 지정하는 것입니다.

 

(7) 인쇄 영역을 가로 가운데 또는 세로 가운데로 맞춤

.CenterHorizontally = True      '인쇄할 영역을 가로 가운데에 배치하는 것입니다.
.CenterVertically = False         '인쇄할 영역을 세로 가운데에 배치하는 것입니다.

 

(8) 컬러 또는 그레이 스케일 인쇄

.BlackAndWhite = False         

흑백(그레이스케일)이 False이므로 컬러로 인쇄하는 것이고,

True로 하면 그레이스케일로 인쇄 됩니다.

 

워크시트에서는 프린터 아래 '프린터 속성'을 눌러 컬러에서 컬러 또는 그레이스케일을 선택해서 설정합니다.

 

(9) 확대/축소 배율 또는 자동 맞

페이지 설정 화면에서 보면 Zoom(확대/축소 배율)과 자동 맞춤중 하나만 선택 가능합니다.

따라서, 자동 맞춤 - FitToPagesWide(용지 너비를 설정된 숫자에 맞춤), FitToPagesTall(용지 높이를 설정된 숫자에 맞춤)을 설정할 때는 Zoom을 숫자에서 False로 바꿔야 합니다.

 

한 페이지에 모든 열 맞추기는

.Zoom = False

.FitToPagesWide = 1

.FitToPagesTall = 0 

라고 값을 지정하며,

 

한 페이지에 모든 행 맞추기는

.Zoom = False

.FitToPagesWide = 0

.FitToPagesTall = 1 

라고 값을 지정합니다.

반응형