본문 바로가기

개발 도구/VBA 매크로

한/글 Shift+Tab 등 일부 기능 구현을 위한 매크로 ① 기능 소개 및 설정 방법

워드에서 VBA 매크로를 통해 한/글의 Shift+Tab(빠른 내어쓰기), 장평 넓게/좁게(Shift+Alt+K/J), 글자 간격(자간) 넓게/좁게(Shift+Alt+W/N), 줄 간격 넓게/좁게(Shift+Alt+Z/A)를 구현하는 방법을 소개합니다.

1. 개요

한/글의 장점은 각종 바로 가기 키를 통해 문서 편집을 편하게 할 수 있다는 점입니다. 특히 표와 그림을 많이 사용하고 자간·행간 조절이 잦은 공문서, 보고서 스타일의 문서에서는 바로 가기 키 사용이 필수적인 면도 있습니다. 반면 워드는 문서를 편집하는 스타일 자체가 다르고 이 같은 바로 가기 키 기능도 상대적으로 부족하여 편집에 약간 번거로운 점이 있습니다.

워드 매크로(VBA)로 구현할 수 있는 일부 한/글 기능을 아래와 같이 구현해 보았습니다. 매크로를 붙여넣고 한번 실행하면, 그 이후 해당 컴퓨터의 워드 프로그램에서 계속 사용할 수 있습니다. 바로 가기 키는 가급적 한/글과 동일하게 미리 맞추어 놓았습니다.

항목 한/글 단축키 매크로 설정 단축키
빠른 내어쓰기 Shift+Tab Ctrl+Shift+Tab
장평 넓게/좁게 Shift+Alt+K/J (같음)
자간 넓게/좁게 Shift+Alt+W/N (같음)
줄 간격 넓게/좁게 Shift+Alt+Z/A (같음)

매크로 스크립트의 작동방법이나 개별 객체의 메서드, 프로퍼티는 다른 포스트에서 설명할 예정입니다.

2. 기능 소개

2.1 빠른 내어쓰기 (한/글의 Shift+Tab)

기능 및 설정 단축키 개요

한/글의 Shift+Tab('빠른 내어쓰기' 또는 '자동 내어쓰기')은 "이 기능이 없어서 워드 못 쓴다"고 하는 사람이 있을 정도로, 한/글의 '천지인'으로 불리는 기능입니다. 워드는 원래 탭이나 글자 간격으로 내어쓰기를 맞출 수 있는데[들여쓰기, 내어쓰기 설정 4.3 내어쓰기], 탭 간격은 잘 안 쓰고, 글자 간격은 한/글의 Shift+Tab처럼 칼각을 맞추기가 좀 어렵습니다.

본 기능은 한/글과 마찬가지로, 커서가 위치한 곳을 기준으로 내어쓰기를 자동으로 맞추는 기능입니다.

[2.1.A] 현재 커서 위치를 기준으로 내어쓰기를 맞춥니다.

한/글과 달리 바로 가기 키를 Ctrl+Shift+Tab으로 기본설정하였습니다. 워드에서 Shift+Tab은 표 셀간 이동이나, 단락 또는 목록의 들여쓰기, 단계를 조절하는 키로 쓰이기 때문에[자동 고침 옵션 4.16], 본문 편집에서 사용 가능한 다른 키로 대체하였습니다.

[2.1.C] 워드(윈도우)에서 Ctrl+Shift+Tab은 원래 메뉴의 탭 간 이동에 사용됩니다.

단락 탭이 설정되는 이유

매크로의 기본동작은 간단합니다. 먼저 현재 커서의 위치를 기준으로 왼쪽 들여쓰기를 맞춘 후, 종전의 첫 줄 간격만큼 내어쓰기를 설정합니다.

[2.1.D] 내어쓰기를 맞추는 기본 동작은 간단합니다.

그런데 만약 들여쓸 위치(커서 위치) 앞에 탭이 있고, 그 탭이 따로 설정한 단락탭(CustomTab)이 아닌 문서에서 공통으로 적용되는 기본탭(DefaultTab)인 경우에는 첫 번째 탭이 왼쪽 들여쓰기 위치까지 늘어납니다[2.1.E, 탭 설정 3. 탭과 내어쓰기의 적용 순서]. 한/글의 Shift+Tab도 실제 이렇게 동작하기 때문에, 한/글에서도 간격이 많이 벌어지는 문제는 종종 경험하게 됩니다.

[2.1.E] 단락에 따로 탭을 설정하지 않으면 첫번째 탭은 들여쓰기 위치(그림의 4.04cm)까지 늘어납니다.

실제 의도한 것은 탭과 상관없이 현재의 위치를 고정한 채 내어쓰기만을 조절하는 것이므로, 이 매크로에서는, 종전의 기본탭(DefaultTab) 위치에 머리 핀 꽂듯이 단락탭(CustomTab)을 설정하여 위치를 고정하였습니다[2.1.F].

[2.1.F] 탭이 늘어나는 것을 방지하기 위해 종전의 탭 위치에 단락탭을 설정하였습니다.

만약 이 기능을 원하지 않으면, 아래 78번째 줄의 코드를 지우거나, 코드 앞에 홑따옴표(')를 붙여 주석 처리하면 작동하지 않습니다.

77
78
    ' 단락 탭(CustomTab) 설정을 원하지 않으면 아래 줄 앞에 홑따옴표(')를 붙여 주석처리하세요.
    Call SetCustomTabs(ptCursorPostion:=ptCursorPostion, ptLeftIndent:=ptLeftIndent)

2.2 장평 넓히기/좁히기

본문에서 블럭을 지정하거나 개체를 선택한 후 바로 가기 키를 사용하여 장평을 조절합니다.

항목 단축키 한/글 매크로
장평 넓히기 Shift+Alt+K 1%p씩 조절 (동일)
장평 좁히기 Shift+Alt+J 1%p씩 조절 (동일)

2.3 자간 넓히기/좁히기

본문에서 블럭을 지정하거나 개체를 선택한 후 바로 가기 키를 사용하여 자간을 조절합니다.

  • 워드에서는 자간을 '간격'이라고 표시하며, 한/글과 달리 point단위로 변경됩니다.
  • 워드에서의 Shift+Alt+N은 메일머지에서 사용하는 메서드(MailMergeToDoc)인데, 어느 상태에서 작동하는 것인지 파악이 안 되어 그냥 덮어썼습니다. 따라서 메일머지 기능을 사용 중이라 하더라도 Shift+Alt+N는 자간 좁히는 기능으로만 사용됩니다.
항목 단축키 한/글 매크로
자간 넓히기 Shift+Alt+W 1%p씩 조절 0.1pt씩 조절
자간 좁히기 Shift+Alt+N 1%p씩 조절 0.1pt씩 조절

2.4 줄 간격 넓히기/좁히기

본문에서 블럭을 지정한 후 바로 가기 키를 사용하여 행간을 조절합니다. 여러 단락을 블록으로 지정하여 동시에 조절하는 것은 가능합니다.

  • 줄 간격이 point단위인 '고정, 최소'인 경우에는 1pt씩, 줄 간격이 배수단위인 '1줄, 1.5줄, 2줄, 배수'인 경우에는 0.1줄씩 조절됩니다.
  • 워드에서 Shift+Alt+A는 '개요 보기 모드'에서 전체 수준을 토글로 표시하는 메소드(ShowAllHeadings)입니다.  '개요 보기 모드'인 경우에는 원래 지정된 기능으로 작동하도록 하였습니다.
항목 단축키 한/글 매크로
줄 간격 넓히기 Shift+Alt+Z 글자에 따라 10%p씩 조절 배수 0.1줄씩 조절
줄 간격 좁히기 Shift+Alt+A 고정 1pt씩 조절 고정 1pt씩 조절

3. 설정 방법

3.1 개요

사용자 본인이 직접 매크로 스크립트를 Normal.dotm에 옮긴 후 실행합니다. 이때 '실행'은 매크로 스트립트에 바로 가기 키를 지정하는 것으로서, 1번만 실행해 놓으면 코드가 남아 있는 한 해당 컴퓨터에서는 계속 사용할 수 있습니다.

3.2 순서

① 아래 스크립트 파일을 다운받아 바탕화면 등에 임시로 저장합니다.

hwpShortcuts.txt
0.01MB

주  의

변형된 파일이 실행되지 않도록 매크로는 개별 사용자가 이 블로그에서 직접 다운받아 사용할 것을 권장합니다.

② 워드에서 Alt+F11을 눌러 '[VB 편집기]를 엽니다. [VB 편집기]에서 아래 [프로젝트 탐색기]가 보이지 않으면, 메뉴의 보기(V) > 프로젝트 탐색기(P)를 선택하여 탐색기를 엽니다.

[3.2.A] 프로젝트 탐색기

Normal을 선택한 후 우클릭하여 파일 가져오기를 선택합니다.

[3.2.B] Normal에서 우클릭하여 파일 가져오기를 선택합니다.

④ ①에서 임시로 저장한 'hwpShortcuts.txt' 파일을 선택하여 불러 옵니다. [파일 가져오기 대화상자]의 기본 파일형식은 'VB 파일 (*.frm,*.bas,*cls)'로 되어 있으므로 txt파일을 선택하기 위해서 파일 형식을 모든 파일 (*.*)로 지정해야 합니다. 모듈은 원래 bas파일(Visual Basic 파일)로 저장되지만, bas는 사용상의 제약이 있어 일반 텍스트 파일(txt)로 저장하여 첨부하였습니다.

[3.2.C] 파일 형식을 '모든 파일 (*.*)'로 하고 방금 전 저장한 파일을 불러 옵니다.

⑤ 'Normal'의 '모듈'을 보면 'hwpShortcuts' 모듈이 생성된 것을 알 수 있습니다. hwpShortcuts.txt의 스크립트가 Normal.dotm으로 옮겨졌으므로, 임시저장한 hwpShortcuts.txt는 지워도 됩니다. 'hwpShortcuts' 모듈을 더블클릭하여 코드 창을 엽니다.

[3.2.D] hwpShortcuts 모듈을 더블클릭하면 편집창이 열리면서 코드를 편집할 수 있습니다.

⑥ "Sub 한글단축키설정()"의 "여기를 클릭한 후 F5를 누르면 매크로 단축키로 설정됩니다" 부분을 클릭한 후 F5를 누르면 매크로 실행되어 7개 기능의 단축키(바로 가기 키)가 각 매크로와 연결됩니다.

이후로는, 지정된 바로 가기 키가 눌리면 연결된 매크로가 바로 실행됩니다. 가령 Ctrl+Shift+Tab이 눌리면 'Sub 빠른내어쓰기()'가 실행되어 해당 단락의 내어쓰기가 맞춰지는 것입니다.

[3.2.E] 오케이

주  의

VBA 매크로는 시스템 자원 사용권한이 있어서 파일을 지우거나 시스템 설정을 변경할 수 있습니다. 특히 여기서 설명하는 방식은 사용자가 직접 Normal.dotm을 편집하는 것이어서, 통상의 매크로파일(.docm, xlsm)과 달리 매크로를 실행할 때 경고가 뜨지 않습니다.

출처를 알 수 없는 매크로를 절대 이 방식으로 실행해서는 안 됩니다.

3.3 일부만 설정하는 방법

매크로 스크립트의 일부 기능만을 사용하고자 할 경우, 3.1.2.의 ⑥단계를 실행하기 전에 바로 가기 키를 설정하는 매크로 앞에 ' 를 붙인 후 실행하면 됩니다.

  • VB(Visual Basic)에서 '는 해당 줄을 주석(comment) 처리하는 것입니다. 주석이 되면 코드로 실행되지 않으며, VBA 편집기에서 녹색 글씨로 표시됩니다.
  • 이미 전체 기능을 설정한 상태에서 일부 기능만 사용하고자 할 경우에는, 먼저 [4]에 따라 전체 기능을 해제한 후 다시 설정하여야 합니다.

3.4 지정된 바로 가기 키를 변경하는 방법

본 매크로는 7개 기능을 하나의 세트로 묶어놓은 것으로서 최대한 설정을 편하게 하기 위해 바로 가기 키도 미리 지정해 놓았습니다.  지정된 키를 다른 키로 변경하고자 할 경우에는 [3.2]의 ⑥단계를 실행하기 전에 코드를 변경해야 합니다.

1
2
3
4
' 기본설정 : 빠른내어쓰기 프로시저를 Ctrl+Shift+Tab 단축키로 연결함
KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyShift, wdKeyTab), KeyCategory:=wdKeyCategoryMacro, Command:="빠른내어쓰기"
' 수정 : 만약 단축키를 Shift+Tab으로 변경하고자 하면 원래 코드에서 'wdKeyControl'을 삭제하면 됨
KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyShift, wdKeyTab), KeyCategory:=wdKeyCategoryMacro, Command:="빠른내어쓰기"

 

각 키 값은 아래 문서를 참고하시면 됩니다.

 

WdKey enumeration (Word)

 

docs.microsoft.com

4. 해제 방법

단순히 코드만을 삭제해도 작동은 하지 않으나, 바로 가기 키와 연결되어 있기 때문에 코드를 바로 삭제하면 해당 키를 누를 때마다 매크로를 찾을 수 없다는 에러표시가 나옵니다. 따라서 완전히 해제하기 위해서는 해당 바로 가기 키 설정을 해제하여야 하고, 바로 가기 키 일괄해제를 위한 별도의 프로시저도 만들어 놓았습니다.

순서는 다음과 같습니다.

Alt+F11을 눌러 VBA 편집창을 열고, hwpShortcuts 모듈을 더블클릭하여 선택합니다.

[4.A] hwpShortcuts를 더블클릭하여 편집창을 열고, 한글단축키해제에서 F5를 누릅니다.

② "Sub 한글단축키해제()"의 "여기를 클릭한 후 F5를 누르면 매크로 단축키가 해제됩니다" 부분을 클릭한 후 F5를 누르면 해제를 위한 매크로가 실행됩니다. 이 프로시저는 종전에 매크로를 설정한 키를 다시 원래의 기능으로 초기화하는 것입니다. 7개 매크로 키가 해제되면서 아래 메시지 창이 나옵니다. 끝났습니다.

이 매크로를 앞으로 쓰지 않을 예정이라면 hwpShortcuts 모듈 자체를 삭제하면 됩니다.

[4.B] 오케이

 

※ 수정 이력

  • 최초 게시 : 2020. 8. 5.
  • 스크립트 수정, hwpShortcuts.txt v1.2 업로드 : 2020. 12. 16.