반응형

안녕하세요, 짤막한 강좌 이충욱 강사입니다.

 

이전 강좌에서 페이지 나누기를 삽입하는 매크로를 만들어 봤습니다.

지정해둔 단축키 <Ctrl + Shift + K>를 눌러 간단히 페이지를 나눌 수 있었는데 나누어야 하는 행 개수가 팔십 여섯개나 되다 보니 단축키를 팔십 여섯번이나 눌러야 했습니다.  

이 경우 매크로를 조금 수정하면 단축키를 팔십 여섯번 누르는 것이 아니라 한 번만 눌러 페이지 나누기를 할 수 있습니다.

 

실습 파일을 다운로드 받아 따라해보세요. 

매크로를 기록한 엑셀 파일의 확장자는 .xlsm입니다. (일반 엑셀 파일 .xlsx)

 

실습 파일 다운로드

페이지나누기_실습파일.xlsm
0.02MB

 

완성 파일 다운로드

페이지나누기_완성파일.xlsm
0.02MB

 

 

실습 파일을 열고 단축키 <Alt + F11>을 누릅니다.

VBE가 실행됩니다.

 

왼쪽 프로젝트 탐색기 창에서 모듈 앞 플러스(+)를 눌러 확장 시키고 Module1을 더블 클릭합니다.

Module1에는 우리가 만든 매크로 코드가 담겨 있습니다. 

만들어진 매크로를 수정하려면 매크로를 기록하듯이 수정할 수 있는 것이 아니라 만들어져 있는 코드를 수정해야 합니다. 

 

Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
    ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

 

매크로 코드 중 다른 것들 살펴보는 것은 잠시 미뤄두고 당장 해결해야 할 부분만 봅시다.

 

우리가 만들었던 매크로는 네 줄로 구성되어 있습니다.

인용부호(')로 시작한 다섯 줄은 주석 이라고 하는데, 설명하기 위해 쓰인 것으로 매크로가 실행되는 것과는 상관없습니다.

 

첫 번째 줄 Sub와 마지막 줄 End Sub이 매크로의 시작과 끝을 나타냅니다.

매크로를 기록하면 자동으로 만들어집니다. 

 

실제 실행되는 부분은 두 줄입니다.

이 두 줄에 나타나 있는 내용도 차차 알아가면 되고 당장 무슨 뜻인지 지금은 알 필요 없습니다. ^^

조금 어림짐작을 하자면 'ActiveCell이 현재 선택된 셀을 의미한다' 정도를 안다면 문제 해결에 도움됩니다.

 

처리할 작업은 팔십 여섯번 페이지 나누는 작업을 자동으로 반복하게 하는 겁니다.

VBA에서 반복문은 For~Next, For Each~Next, Do~Loop문 3가지가 있습니다.

기본적인 반복문은 Do~Loop문입니다.

여기서는 Do~Loop문을 이용해 문제를 해결할 겁니다. 

 

Do~Loop문에는 WhileUntil로 조건을 지정하는데, 만약 DoLoop만 있다면 그 속에 두 줄의 명령이 무한 반복하게 됩니다. 

그래서 언제까지 반복이 멈출 조건이 필요한겁니다. 

Loop 옆에 While ActiveCell <> "" 을 추가합니다. 

해석하면 '현재 셀이 비어있지 않을 때까지'가 됩니다. 

ActiveCell은 현재 셀이고, <> 같지 않다 연산자가 되고, "" 공백입니다. 

 

Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
    Do
    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
    ActiveCell.Offset(1, 0).Range("A1").Select
    Loop While ActiveCell <> ""
End Sub

명령문을 작성할 때 소문자로 입력하고 <Enter>를 누르거나 방향키를 사용하여 다른 줄로 이동하면 자동으로 첫 글자가 대문자로 바뀝니다. 

그러면 철자가 맞다는 의미이므로 소문자로 입력해 저절로 바뀌는지 확인하는 것이 좋습니다. (멋진 팁이죠?)

 

여기까지만 해도 매크로의 문제는 해결되었지만 몇 가지 처리를 더해보겠습니다. 

ActiveWindow 앞에 커서를 두고 <Tab> 키를 누르면 오른쪽으로 4칸 이동합니다.

ActiveCell 앞에서도 <Tab> 키를 누릅니다. 

 

Do~Loop문이 한 묶음이고 그 안에 적은 명령문들을 Do~Loop문에 포함된 명령문이라는걸 시각적으로 표시하기 위해 들여쓰기 한 것입니다.

Sub~End Sub문도 한 묶음이라 처음 코드에 들여 쓰기가 되어 있었습니다.

 

Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
    Do
        ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
        ActiveCell.Offset(1, 0).Range("A1").Select
    Loop While ActiveCell <> ""
End Sub

 

그리고 하나 더! 

DoEvents 명령문을 하나 더 작성해 둡니다. 

 

위 두 줄과 구분하기 위해 빈 줄을 하나 넣고 doevents라고 입력한 뒤 커서를 다음 줄로 옮기면 DoEvents로 저절로 변경되어야 합니다.

DoEvents 명령문은 반복문 안에 입력해서 혹시 문제가 생겨 무한반복이 될 경우 [재설정] 버튼을 눌러 무한반복을 취소할 수 있도록 해 주는 코드입니다.

Sub 페이지나누기()
'
' 페이지나누기 매크로
'
' 바로 가기 키: Ctrl+Shift+K
'
    Do
        ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
        ActiveCell.Offset(1, 0).Range("A1").Select
        
        DoEvents
    Loop While ActiveCell <> ""
End Sub

 

이제 열린 VBE 창을 닫거나(다시 <Alt + F11>) 옆으로 미뤄두고 엑셀 창으로 돌아갑니다.

엑셀에서 [A5] 셀에 커서를 둡니다.

우리가 만든 매크로 실행 단축키 <Ctrl + Shift + K>를 누르면 커서가 아래로 이동하며 처리가 됩니다.

 

매크로만으로도 충분히 쉽게 문제를 해결할 수 있었지만 VBA를 사용하므로 더 편리하게 쓸 수 있게 됩니다.

 

수고하셨습니다.

반응형

+ Recent posts