• 최초 작성일: 2002-04-19
  • 최종 수정일: 2026-09-30
  • 조회수: 8 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 현재 페이지 인쇄하기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

직장 생활에서 가장 중요한 덕목이 무엇이냐는 후배들의 질문에 Exceller는 주저 없이 "끈기"라고 답합니다. 이것 조금 하다 이 길이 아닌가 싶어 그만두고, 저것 조금 하다 또 그만두고, 남이 하니까 따라 하는 식이라면 무엇 하나 제대로 이루기 어렵습니다.

마라톤을 하다 보면 초반에 호흡이 곤란하고 가슴이 아프며 숨이 넘어갈 것 같은 순간이 오는데 이를 Dead point(사점)라고 합니다. 그런데 이 고비를 넘기면 언제 그랬냐는 듯 고통이 사라지고 호흡이 안정되어 계속 달릴 의욕이 생기는데, 이것이 Second wind입니다. 어떤 일이든 이 고비만 넘기면 새로운 세상이 열리는데 그 앞에서 주저앉는 경우가 많아 안타깝습니다. 지금이 Dead point라면 인내와 끈기로 극복해 보시기 바랍니다.

오늘은 이런 질문을 살펴봅니다. 아래아 한글 같은 프로그램에서는 미리 보기를 하면 커서가 있는 현재 페이지가 보이는데, 엑셀에서는 미리 보기를 하면 항상 첫 장부터 보이므로 엑셀에서도 현재 페이지만 미리 볼 수 있는 방법이 있느냐는 내용입니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

현재 페이지 인쇄하기

핵심 요약: 현재 페이지만 인쇄/미리 보기

활성 셀이 속한 페이지 번호를 쪽 나눔 오브젝트로 계산한 다음 PrintOut 메서드의 From과 To에 같은 번호를 지정합니다.

  • 1단계: 인쇄할지 미리 볼지 선택하도록 합니다.
  • 2단계: 페이지 순서 설정에 따라 HPageBreaks/VPageBreaks로 현재 페이지 번호를 계산합니다.
  • 3단계: PrintOut의 From과 To를 같은 번호로 지정하여 출력합니다.

Step 1: 현재 페이지 인쇄와 미리 보기

지난 시간에 설명드린 것처럼 엑셀은 페이지 개념이 아주 희박합니다. 따라서 페이지 단위로 특정 작업을 하는 것은 쉬운 일이 아닙니다. 하지만 강좌 시간에 소개하는 것을 보니 불가능하지는 않겠지요? ^^ 바로 그렇습니다!

셀 포인터를 1페이지가 아닌 다른 페이지로 옮긴 다음 코드를 실행해 보세요. 워드나 아래아 한글에서처럼 현재 페이지만 인쇄하거나 미리 볼 수 있습니다.

Step 2: PrintActivePage 프로시저

셀 포인터가 있는 셀이 몇 번째 페이지에 속하는지 HPageBreaks와 VPageBreaks로 계산하고, 그 페이지 번호를 PrintOut 메서드의 From과 To에 똑같이 지정하는 방식입니다.

Sub PrintActivePage()
    Dim intTotalPage As Integer
    Dim lngPageNum As Long
    Dim lngHPageCount As Long
    Dim lngVPageCount As Long
    Dim hpbBreak As HPageBreak
    Dim vpbBreak As VPageBreak
    Dim blnOK As Boolean
    Dim rngCurrent As Range

    If TypeName(Selection) <> "Range" Or Selection.Areas.Count > 1 Then
        MsgBox "영역이 잘못 선택되었습니다. 다시 확인하세요!", , "영역 선택 오류//www.iExceller.com"
        Exit Sub
        ' Range 오브젝트가 아닌 다른 것을 선택하였거나 하나 이상의 영역이 선택된
        ' 경우에는 프로시저를 종료합니다.

    End If
    blnOK = IIf(MsgBox("프린터로 출력할까요?", vbYesNo, "출력 방법 선택//www.iExceller.com") = vbYes, False, True)
    ' 프린터로 출력할 것인지 미리 보기만 할 것인지를 묻습니다.

    Set rngCurrent = Selection.Cells(1)
    ' 만약 여러 셀이 선택된 경우에는 첫번째 셀이 있는 페이지를 우선으로 합니다.

    On Error GoTo ET

    With ActiveSheet
        .DisplayPageBreaks = True
        ' 페이지 구분선이 모두 나타나도록 하고…

        If .PageSetup.Order = xlDownThenOver Then
        ' 페이지 순서가 행 우선이냐 열 우선이냐에 따라 출력되는 순서가 틀려집니다.
        ' 따라서 이것을 구분해야 합니다. 먼저 xlDownThenOver 즉, 행 우선인 경우에
        ' 대한 처리를 합니다.

            For Each hpbBreak In .HPageBreaks
            ' 셀 포인터가 있는 셀의 행과 수평 페이지 구분 개체를 차례대로 비교합니다.
            ' hpbBreak의 Row가 rngCurrent.Row 보다 크다는 것은 활성화 된 셀이 현재의
            ' HPageBreak 개체보다 뒤쪽에 있다는 얘기가 되겠지요?

                If hpbBreak.Location.Row > rngCurrent.Row Then
                    Exit For
                Else
                    lngPageNum = lngPageNum + 1
                End If
            Next hpbBreak

            lngPageNum = lngPageNum + 1
            lngVPageCount = .VPageBreaks.Count
            lngHPageCount = .HPageBreaks.Count

            If lngVPageCount >= 1 Then
            ' 열 방향으로 페이지가 한 열 이상이라면…

                For Each vpbBreak In .VPageBreaks
                    If vpbBreak.Location.Column <= rngCurrent.Column Then lngPageNum = lngPageNum + lngHPageCount + 1
                Next vpbBreak
            End If
        Else
        ' 이번에는 페이지 순서가 열 우선으로 설정이 되어 있는 경우에 대한 처리를
        ' 수행합니다. 기본적인 원리는 위의 것과 똑같습니다.

            For Each vpbBreak In .VPageBreaks
                If vpbBreak.Location.Column > rngCurrent.Column Then
                    Exit For
                Else
                    lngPageNum = lngPageNum + 1
                End If
            Next vpbBreak

            lngPageNum = lngPageNum + 1
            lngVPageCount = .HPageBreaks.Count
            lngHPageCount = .VPageBreaks.Count

            If lngVPageCount >= 1 Then
                For Each hpbBreak In .HPageBreaks
                    If hpbBreak.Location.Row <= rngCurrent.Row Then lngPageNum = lngPageNum + lngHPageCount + 1
                Next hpbBreak
            End If
        End If
        .PrintOut from:=lngPageNum, To:=lngPageNum, preview:=blnOK
        ' 실제로 미리보기(또는 인쇄)를 하는 부분입니다. 개체 인쇄를 담당하는 PrintOut
        ' 메서드의 from과 to를 같은 페이지로 지정함으로써 현재 페이지만 출력되도록
        ' 하는 것이 요점입니다.

    End With
    Exit Sub
ET:
    MsgBox Err.Number & "번 에러가 발생하였습니다!", , "에러 발생//www.iExceller.com"
    Err.Clear
End Sub

페이지 번호는 인쇄 순서 설정(행 우선 또는 열 우선)에 따라 계산 방법이 달라지므로 두 경우를 나누어 처리하였습니다. 핵심은 PrintOut 메서드의 From과 To를 같은 페이지로 지정하여 현재 페이지만 출력하도록 한 부분이며, Preview 인수를 이용하면 프린터로 내보내지 않고 미리 보기만 할 수도 있습니다.

참고: 페이지 나눔 정보는 사용 중인 프린터와 용지 설정에 따라 달라집니다. 페이지 순서(행 우선 또는 열 우선)는 [페이지 설정]의 시트 탭에서 확인할 수 있습니다.

다음 시간에 또…

정리 — 현재 페이지 인쇄 핵심

구분 사용한 코드 역할
페이지 순서 PageSetup.Order 행 우선/열 우선 구분
가로 쪽 나눔 HPageBreaks 행 방향 페이지 위치
세로 쪽 나눔 VPageBreaks 열 방향 페이지 위치
현재 페이지 From:=n, To:=n 한 페이지만 출력
미리 보기 Preview:=True 인쇄 대신 미리 보기

자주 묻는 질문 (FAQ)

Q1. 엑셀에서 현재 페이지만 미리 볼 수 있나요?

기본 기능으로는 어렵지만 활성 셀이 속한 페이지 번호를 계산한 뒤 PrintOut 메서드의 From과 To에 같은 번호를 주고 Preview를 True로 지정하면 가능합니다.

Q2. 페이지 순서에 따라 왜 계산이 달라지나요?

행 우선(위에서 아래로 후 오른쪽으로)인지 열 우선인지에 따라 페이지 번호가 매겨지는 순서가 다르기 때문입니다.

Q3. 프린터로 출력하지 않고 미리 보기만 하려면?

PrintOut 메서드의 Preview 인수를 True로 지정합니다. 예제는 메시지 상자에서 아니요를 누르면 미리 보기만 합니다.

마치며

페이지 개념이 희박한 엑셀이지만 쪽 나눔 오브젝트를 이용하면 워드처럼 현재 페이지만 인쇄하거나 미리 볼 수 있습니다.