본문 바로가기
엑셀 (Excel)/엑셀 매크로 VBA

Excel 엑셀 매크로 - Beforeprint 이벤트로 Print Line 설정 하기

by ★√★ 2021. 3. 15.

안녕하세요, Excel 엑셀 매크로 중에 Print Line을 설정하는 법에 대한 내용입니다. 업무나 가정에서 엑셀을 통해서 작업을 하고, 특히 테이블이나 표 작업을 하고 출력을 하게 되면 꼭 상위 라인과 하위라인이 빠지게 되는 현상을 위한 매크로 입니다.

 

 즉, 상위라인과 하위라인이 빠지는 현상을 보완 할 수 있는 내용을 준비했습니다. 오늘 알려드릴 Macro는 Beforeprint 이벤트를 이용한 Macro 입니다. 그럼 일단 어떤 문제에 대해서 매크로를 만들려고 하는지 부터 자세히 설명 드리도록 하겠습니다.

 

 

1. Print Line을 설정에 대한 Needs 확인하기

: [파일] - [인쇄] 화면으로 이동하시면 아래 snap shot에서 보시는 것 처럼 맨 아래 부분에 실선이 빠져서 출력이 되는 걸 확인 하실 수 있습니다. 이럴 경우에는 다시 Manual로 실선 처리를 해야 합니다. 한 두 페이지라면 수작업을 해도 괜찮겠지만, 페이지가 10, 20, 100 페이지 넘어가는 경우에는 하나 하나 수정하기가 번거로우실 겁니다. 그래서 이 매크로를 만들게 되었습니다.

 

Print-Line
Print-Line

 

Print-Line
Print-Line

 

Print-Line
Print-Line

 

 

2. Print Line 매크로 With Beforeprint

: Print Line을 만들어 주기 위한 매크로는 "Beforeprint" 를 사용하는 이벤트 코드를 작성을 해야합니다. 위에 설명드렸던 내용을 예제 Source로 이용하여, 코드를 구현하도록 하겠습니다. 코드 입력을 위해, [개발도구] - [Visual Basic] 창을 활성화 시킵니다. 그리고 나서, 왼쪽 메뉴에 보이는 "통합 문서"를 클릭 하여, [Workbook] - [BeforePrint] 항목을 선택합니다. 

 

Beforeprint-매크로
Beforeprint-매크로
Beforeprint-매크로

 

- BeforePrint 를 선택하게 되면, 자동적으로 Sub 프로시저가 활성화가 되며, 그 안에 코드를 구현하시면 됩니다. 관련 코드는 아래와 같습니다. 코드에 맞춰서 설명하도록 하겠습니다. 일단 BeforePrint에서 호출하는 "TEST_PrintLine" 프로시저 부터 설명 드리도록 하겠습니다. 

=================================================================================

 

' BeforePrint 문에서 호출할 TEST_PrintLine 프로시저를 설정함

Sub TEST_PrintLine(Selected_Range As Range, Line1 As Integer)

 

    With Selected_Range

       

        ' 선택한 범위에서 조건문 서식을 사용하기 위한 구문임. Formula1:="TRUE" 는 항상 조건문 서식을 사용할 수 있게 설정하는 구문임.

        .FormatConditions.Add Type:=xlExpression, Formula1:="TRUE"

       

        ' 조건문 서식 하나를 삽입하는 구문임. "Border Line"은 윗줄에 표현할지 아래쪽에 표현할지는 정할 수 있음.

        With .FormatConditions(1).Borders(Line1)

            .LineStyle = xlContinuous   ' 선 종류는 실선으로 설정

            .Weight = xlThin ' 선 굵기는 가는 실선으로 설정. 혹, 좀 더 굵은 실선을 하고 싶으면 "xlMedium" 입력

        End With

 

    End With

 

End Sub

 

=================================================================================

 

- 그럼 위 코드를 이용하여, BeforePrint 이벤트 코드를 어떻게 구현하는지에 대해서 설명 드리겠습니다. 아래 코드를 보시면, "Call" 함수를 이용하여, "TEST_PrintLine" 프로시저를 부르는 걸 확인 하실 수 있습니다. 아래줄 과 윗줄 둘 다 선을 표시해줘야 하므로, 두 번 Call 함수로 호출한 것입니다. 

 

=================================================================================

 

Private Sub Workbook_BeforePrint(Cancel As Boolean)

   

   

    ' 가로 페이지 구분선의 변수를 HPageBreak를 이용하여, 선언.

    ' 세로 페이지 구분선의 변수는 VPageBreak를 시용하여 선언하면 됨(참조)

    Dim Print_Borderline As HPageBreak

   

    ' 현재 설정되어 있는 모든 조건부 서식을 Delete 함. 왜냐하면, 조건부 서식을 통해서 Print Line을 설정해주기 위해

    Cells.FormatConditions.Delete

 

    For Each Print_Borderline In ActiveSheet.HPageBreaks

       

        'TEST_PrintLine 프로시저를 불러서, 코드를 실행 시키기 위해서 Call 문 사용

        'Print Line 설정을 위해서 설정하는 범위는 문서 범위를 참조하여 변형해야 함 (저는 B:E 로 설정)

        Call TEST_PrintLine(Print_Borderline.Location.Offset(-1).Columns("B:E"), xlBottom)

        Call TEST_PrintLine(Print_Borderline.Location.Columns("B:E"), xlTop)

 

    Next

   

    ' 프린트 라인 코드 구현이 잘 이뤄졌는지에 대한 확인 메시지 출력

    MsgBox "윗줄 아랫줄에 대한 Print Line 설정이 완료가 되었습니다."

   

End Sub

================================================================================= 

 

- 이 코드를 입력을 하고 인쇄 미리 보기를 하더라도, 줄이 보이지 않습니다. 왜냐하면 인쇄(print)가 일어나지 않았기 때문입니다. "Beforeprint" 라는 이벤트는 인쇄(print)라는 이벤트가 일어난다는 전제하에 그 전에 일어나는 매크로이기 때문에 인쇄(print) 라는 행위가 일어나지 않으면, 일어나지 않게 되는 것입니다. 그래서 위 매크로를 입력을 하고, 인쇄(print) 를 꼭 하셔야, 그 라인이 생기는 걸 확인 하실 수 있습니다. 아래 snap shot 참조 부탁 드립니다.

 

Beforeprint-매크로-구현
Beforeprint-매크로-구현

 

 이상입니다. 이렇게 매번 매크로를 공부하고, 배워나가면서 느끼는 게, 왜 이걸 지금 배웠을 때 라는 생각이 들었습니다. 그 전에 배웠다면, 업무를 조금이나마 더 효율적으로 할 수 있었을 텐데라는 아쉬움이 남더라구요. 하지만, 항상 늦은 때는 없다라고 생각합니다. 시작은 좀 늦었지만, 이제 부터라도 정말 열심히 노력한다면, 기울이가 높은 수준으로 향상 할 수 있을 거라고 생각합니다. 물론, 많은 노력과 시간이 필요하다는 건 인지하고 있는 상태입니다.

 

 그럼 오늘도 매크로 공부하시느라고 수고 많이 하셨습니다. 지금은 잘 모르시겠지만, 이게 하나 하나 싾이고, 당장은 직접 구현은 못하겠지만, 어떻게 구현되는지 이해만 하신다면 구글을 통해서 충분히 대부분의 코드를 구할 수 있습니다. 같이 공부하시고, 성장해서 엑셀을 이용한 작업을 더 효율적으로 수행할 수 있었으면 합니다. 그럼 여기에서 마무리 하겠습니다. 감사합니다. 

 

제 Posting이 조금이나마 정보 전달에 도움이 되셨길 빌며, 되셨다면, 구독, 댓글, 공감 3종 세트 부탁 드립니다. 감사합니다. 

[저작권이나, 권리를 침해한 사항이 있으면 언제든지 Comment 부탁 드립니다. 검토 후 수정 및 삭제 조치 하도록 하겠습니다. 그리고, 기재되는 내용은 개인적으로 습득한 내용이므로, 혹 오류가 발생할 수 있을 가능성이 있으므로, 기재된 내용은 참조용으로만 봐주시길 바랍니다. 게시물에, 오류가 있을때도, Comment 달아 주시면, 검증 결과를 통해, 수정하도록 하겠습니다.]

728x90

댓글


// 내부링크를 현재창으로 열기 // Open internal links in same tab