none
[질문] PrintPreview화면 이랑 Printout된 출력물이랑 내용이 달라요!! RRS feed

  • 질문

  • Option Explicit

    Sub left_header()

        Dim i As Long
       
        Application.ScreenUpdating = False
        For i = 1 To (Sheets("data").HPageBreaks.Count + 1) * _
                (Sheets("data").VPageBreaks.Count + 1)

            With Sheets("data").PageSetup

            If (i Mod 2 = 1) Then
                .LeftFooter = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
                .CenterFooter = "&""Arial""&8 - " & i + 468 & " -"
            Else
                .LeftHeader = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
                .CenterHeader = "&""Arial""&8 - " & i + 468 & " -"
            End If

    '       Sheets("data").PrintPreview                                       'if printout, this line delete
            Sheets("data").PrintOut from:=i, To:=i

               .LeftFooter = ""
               .CenterFooter = ""
               .LeftHeader = ""
               .CenterHeader = ""
            End With

        Next i
       
    End Sub

    이런 소스인데요, Sheets("data").PrintPreview와 같이 미리보기로 보면 홀수 페이지에서는 왼쪽 아랫글에 ref시트를 참조하여 값을

    찍고 짝수 페이지에서는 왼쪽 머리글에 ref시트를 참조하여 값을 정상적으로 출력하는데 해당 소스를 주석처리 하고

     Sheets("data").PrintOut from:=i, To:=i 라인을 활성화 시켜서 실제 프린터를 해보면 짝수 페이지에서는 이상하게 왼쪽 머리글이

    미리보기(PrintPreview) 때와 달리 출력이 되지 않고 빈 란으로 나옵니다! 이유가 멀까요? 버그인가요??

    :)

    p.s : 참조하실 수 있게 파일 링크 걸어둡니다!

    다운로드


    • 편집됨 mir_series 2016년 5월 21일 토요일 오전 9:26 modify
    2016년 5월 21일 토요일 오전 9:25

답변

  • Sub left_header()
    
        Dim i As Long
        
        Application.ScreenUpdating = False
        For i = 1 To (Sheets("data").HPageBreaks.Count + 1) * _
                (Sheets("data").VPageBreaks.Count + 1)
    
            With Sheets("data").PageSetup
    
            If (i Mod 2 = 1) Then
                .LeftFooter = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
                .CenterFooter = "&""Arial""&8 - " & i + 468 & " -"
            Else
                .LeftHeader = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
                .CenterHeader = "&""Arial""&8 - " & i + 468 & " -"
            End If
        Next i
        
     <<요부분>>
    
    End Sub

    요부분 자리에다가 

        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = ""
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftHeader = ""
            .CenterHeader = ""
            .RightHeader = ""
            .LeftFooter = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
            .CenterFooter = "&""Arial""&8 - " & i + 468 & " -"
            .RightFooter = ""
            .LeftMargin = Application.InchesToPoints(0.708661417322835)
            .RightMargin = Application.InchesToPoints(0.708661417322835)
            .TopMargin = Application.InchesToPoints(0.748031496062992)
            .BottomMargin = Application.InchesToPoints(0.748031496062992)
            .HeaderMargin = Application.InchesToPoints(0.31496062992126)
            .FooterMargin = Application.InchesToPoints(0.31496062992126)
            .PrintHeadings = False
            .PrintGridlines = False
            .PrintComments = xlPrintNoComments
            .PrintQuality = 600
            .CenterHorizontally = False
            .CenterVertically = False
            .Orientation = xlPortrait
            .Draft = False
            .PaperSize = xlPaperA4
            .FirstPageNumber = xlAutomatic
            .Order = xlDownThenOver
            .BlackAndWhite = False
            .Zoom = 100
            .PrintErrors = xlPrintErrorsDisplayed
            .OddAndEvenPagesHeaderFooter = True
            .DifferentFirstPageHeaderFooter = False
            .ScaleWithDocHeaderFooter = True
            .AlignMarginsHeaderFooter = True
            .EvenPage.LeftHeader.Text = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
            .EvenPage.CenterHeader.Text = "&""Arial""&8 - " & i + 468 & " -"
            .EvenPage.RightHeader.Text = ""
            .EvenPage.LeftFooter.Text = ""
            .EvenPage.CenterFooter.Text = ""
            .EvenPage.RightFooter.Text = ""
            .FirstPage.LeftHeader.Text = ""
            .FirstPage.CenterHeader.Text = ""
            .FirstPage.RightHeader.Text = ""
            .FirstPage.LeftFooter.Text = ""
            .FirstPage.CenterFooter.Text = ""
            .FirstPage.RightFooter.Text = ""
        End With
        Application.PrintCommunication = True

    이렇게 셋팅하면 되지않나요??

    그리고, 마지막으로 프린트 출력 시작 시키는 코드를 넣으면 될것 같은데, 한번 확인해보세요.


    프로그램 개발에는 정답이 없다.

    2016년 5월 23일 월요일 오전 8:06
  • Sub left_header()

        Dim i As Long                                                           '행과 페이지 늘려갈 변수

        Application.ScreenUpdating = False                                      '화면 업데이트 (일시) 정지
        'MsgBox Sheets("data").HPageBreaks.Count + 1

        With Sheets("data").PageSetup                                 '현 시트의 페이지 셋업
                .CenterFooter = ""
                .LeftFooter = ""
                .CenterHeader = ""
                .LeftHeader = ""
        End With

        For i = 1 To (Sheets("data").HPageBreaks.Count + 1) * _
                (Sheets("data").VPageBreaks.Count + 1)

            With Sheets("data").PageSetup                                 '현 시트의 페이지 셋업
                .CenterFooter = ""
                .LeftFooter = ""
                .CenterHeader = ""
                .LeftHeader = ""

            If (i Mod 2 = 1) Then                                                     '홀수일때
                .LeftFooter = "&""Arial,보통""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value            '왼쪽 꼬리말에 셀값 넣기
                .CenterFooter = "&""Arial,보통""&8 - " & i + 468 & " -"
            ElseIf (i Mod 2 = 0) Then
                .EvenPage.LeftHeader.Text = "&""Arial,보통""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value           '왼쪽 머리말에 셀값 넣기
                .EvenPage.CenterHeader.Text = "&""Arial,보통""&8 - " & i + 468 & " -"
            End If

    '       Sheets("data").PrintPreview                                       '실제 인쇄시 이줄 삭제. 아랫줄 사용.
            Sheets("data").PrintOut from:=i, To:=i

            '왼쪽 머리말 및 꼬리말 초기화

            .CenterFooter = ""
            .LeftFooter = ""
            .EvenPage.LeftHeader.Text = ""
            .EvenPage.CenterHeader.Text = ""

            End With

        Next i

    End Sub

    이렇게 변경했더니 해결됬어요!! ^^ 알려주신 evenpage 객체를 이용했더니 문제가 잘 풀린 것 같습니다. 

    감사합니다. 

    :)

                                                                                                          
    2016년 5월 24일 화요일 오전 8:12

모든 응답

  • Sub left_header()
    
        Dim i As Long
        
        Application.ScreenUpdating = False
        For i = 1 To (Sheets("data").HPageBreaks.Count + 1) * _
                (Sheets("data").VPageBreaks.Count + 1)
    
            With Sheets("data").PageSetup
    
            If (i Mod 2 = 1) Then
                .LeftFooter = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
                .CenterFooter = "&""Arial""&8 - " & i + 468 & " -"
            Else
                .LeftHeader = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
                .CenterHeader = "&""Arial""&8 - " & i + 468 & " -"
            End If
        Next i
        
     <<요부분>>
    
    End Sub

    요부분 자리에다가 

        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = ""
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftHeader = ""
            .CenterHeader = ""
            .RightHeader = ""
            .LeftFooter = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
            .CenterFooter = "&""Arial""&8 - " & i + 468 & " -"
            .RightFooter = ""
            .LeftMargin = Application.InchesToPoints(0.708661417322835)
            .RightMargin = Application.InchesToPoints(0.708661417322835)
            .TopMargin = Application.InchesToPoints(0.748031496062992)
            .BottomMargin = Application.InchesToPoints(0.748031496062992)
            .HeaderMargin = Application.InchesToPoints(0.31496062992126)
            .FooterMargin = Application.InchesToPoints(0.31496062992126)
            .PrintHeadings = False
            .PrintGridlines = False
            .PrintComments = xlPrintNoComments
            .PrintQuality = 600
            .CenterHorizontally = False
            .CenterVertically = False
            .Orientation = xlPortrait
            .Draft = False
            .PaperSize = xlPaperA4
            .FirstPageNumber = xlAutomatic
            .Order = xlDownThenOver
            .BlackAndWhite = False
            .Zoom = 100
            .PrintErrors = xlPrintErrorsDisplayed
            .OddAndEvenPagesHeaderFooter = True
            .DifferentFirstPageHeaderFooter = False
            .ScaleWithDocHeaderFooter = True
            .AlignMarginsHeaderFooter = True
            .EvenPage.LeftHeader.Text = "&""Arial""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value
            .EvenPage.CenterHeader.Text = "&""Arial""&8 - " & i + 468 & " -"
            .EvenPage.RightHeader.Text = ""
            .EvenPage.LeftFooter.Text = ""
            .EvenPage.CenterFooter.Text = ""
            .EvenPage.RightFooter.Text = ""
            .FirstPage.LeftHeader.Text = ""
            .FirstPage.CenterHeader.Text = ""
            .FirstPage.RightHeader.Text = ""
            .FirstPage.LeftFooter.Text = ""
            .FirstPage.CenterFooter.Text = ""
            .FirstPage.RightFooter.Text = ""
        End With
        Application.PrintCommunication = True

    이렇게 셋팅하면 되지않나요??

    그리고, 마지막으로 프린트 출력 시작 시키는 코드를 넣으면 될것 같은데, 한번 확인해보세요.


    프로그램 개발에는 정답이 없다.

    2016년 5월 23일 월요일 오전 8:06
  • Sub left_header()

        Dim i As Long                                                           '행과 페이지 늘려갈 변수

        Application.ScreenUpdating = False                                      '화면 업데이트 (일시) 정지
        'MsgBox Sheets("data").HPageBreaks.Count + 1

        With Sheets("data").PageSetup                                 '현 시트의 페이지 셋업
                .CenterFooter = ""
                .LeftFooter = ""
                .CenterHeader = ""
                .LeftHeader = ""
        End With

        For i = 1 To (Sheets("data").HPageBreaks.Count + 1) * _
                (Sheets("data").VPageBreaks.Count + 1)

            With Sheets("data").PageSetup                                 '현 시트의 페이지 셋업
                .CenterFooter = ""
                .LeftFooter = ""
                .CenterHeader = ""
                .LeftHeader = ""

            If (i Mod 2 = 1) Then                                                     '홀수일때
                .LeftFooter = "&""Arial,보통""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value            '왼쪽 꼬리말에 셀값 넣기
                .CenterFooter = "&""Arial,보통""&8 - " & i + 468 & " -"
            ElseIf (i Mod 2 = 0) Then
                .EvenPage.LeftHeader.Text = "&""Arial,보통""&8 " & Sheets("ref").Range("A1").Offset(i, 0).Value           '왼쪽 머리말에 셀값 넣기
                .EvenPage.CenterHeader.Text = "&""Arial,보통""&8 - " & i + 468 & " -"
            End If

    '       Sheets("data").PrintPreview                                       '실제 인쇄시 이줄 삭제. 아랫줄 사용.
            Sheets("data").PrintOut from:=i, To:=i

            '왼쪽 머리말 및 꼬리말 초기화

            .CenterFooter = ""
            .LeftFooter = ""
            .EvenPage.LeftHeader.Text = ""
            .EvenPage.CenterHeader.Text = ""

            End With

        Next i

    End Sub

    이렇게 변경했더니 해결됬어요!! ^^ 알려주신 evenpage 객체를 이용했더니 문제가 잘 풀린 것 같습니다. 

    감사합니다. 

    :)

                                                                                                          
    2016년 5월 24일 화요일 오전 8:12
  • 도움되셨다니 다행입니다. ^^

    즐거운 하루 보내세요~


    프로그램 개발에는 정답이 없다.

    2016년 5월 26일 목요일 오전 2:12