본문 바로가기

개발 도구/VBA 매크로

각주 장식 추가 매크로

1. 각주 장식 추가 매크로

1.1 개요

여기서 설명하는 매크로는 각주를 입력하면 1) 또는 [1]과 같이 번호 앞·뒤로 장식을 추가하는 기능입니다. 사용하려는 범위에 따라 설정 방법이 다릅니다.

① 해당 워드 프로그램에서 삽입하는 모든 각주에 장식을 붙이는 경우

기본 서식 파일인 Normal.dotm에 InsertFootnoteNow라는 이름으로 프로시저를 저장하면, 해당 워드 프로그램에서 삽입하는 모든 각주에 장식을 붙일 수 있습니다. 바로 가기 키(Ctrl+Alt+F)로 삽입하든 메뉴(참조 탭 > 각주 삽입)로 삽입하든 동일합니다.

② 해당 워드 프로그램에서 특정한 경우만 각주에 장식을 붙이는 경우

기본 서식 파일인 Normal.dotm에 매크로를 저장하되 프로시저 이름을 InsertFootnoteNow가 아닌 다른 것으로 지정해 두고, 별도의 바로 가기 키를 지정해 두고 필요할 때 쓰는 방법입니다. 메뉴(참조 탭 > 각주 삽입)로 삽입할 때는 작동하지 않습니다.

③ 특정 문서에서만 각주에 장식을 붙이는 경우

해당 문서에 InsertFootnoteNow라는 이름으로 프로시저를 저장해두면, 해당 문서에서 삽입하는 모든 각주에 장식을 붙일 수 있습니다. 바로 가기 키(Ctrl+Alt+F)로 삽입하든 메뉴(참조 탭 > 각주 삽입)로 삽입하든 동일합니다.

InsertFootnoteNow

각주를 바로 가기 키(Ctrl+Alt+F) 또는 메뉴(참조 탭 > 각주 삽입)로 삽입하면 InsertFootnoteNow라는 명령(command)이 실행됩니다. 이때 매크로에 같은 이름의 InsertFootnoteNow라는 프로시저가 있으면 그 프로시저가 내장 명령보다 먼저 실행됩니다.

  • 워드 구 버전(2013 이전?)에서는 Now를 뺀 InsertFootnote란 이름을 사용합니다.

이같이 내장 명령과 동일한 이름으로 프로시저를 덮어 쓰면 워드를 평소처럼 사용하면서 다른 기능을 추가할 수 있습니다.

미주는 InsertEndnoteNow이고, 방법은 각주와 동일합니다. 여기서 설명하는 내용에서 'Footnote'를 'Endnote'로 바꾸기만 하면 됩니다.

1.2 매크로 스크립트

각주를 삽입할 때 번호 앞·뒤로 장식을 붙이는 스크립트는 아래와 같습니다. 아래 예시는 [1]로 설정되어 있는데, 1)로 설정하려면 앞장식문자 = "", 뒷장식문자 = ")"로 변경하면 됩니다. ② 해당 워드 프로그램에서 특정한 경우만 각주에 장식을 붙이는 경우는 Sub InsertFootnoteNow()를 Sub 장식각주삽입() 등 다른 이름으로 바꾸면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Sub InsertFootnoteNow()
' 기본 각주 형식을 유지하려면 InsertFootnoteNow를 다른 이름으로 변경하세요 
 
Dim 앞장식문자, 뒷장식문자 As String
Dim rngBody, rngFootnote As Range
 
On Error GoTo ErrorHandler
 
Dim objUndo As UndoRecord
Set objUndo = Application.UndoRecord
objUndo.StartCustomRecord ("장식 각주 삽입")
 
앞장식문자 = "["  ' 따옴표 안에 원하는 장식 문자를 입력하세요.
뒷장식문자 = "]"  ' 따옴표 안에 원하는 장식 문자를 입력하세요.
 
' 본문에서 각주가 삽입되는 위치를 범위로 지정
Selection.Collapse Direction:=wdCollapseEnd
Set rngBody = Selection.Range
 
' 각주 삽입
ActiveDocument.Footnotes.Add Range:=Selection.Range
 
' 본문의 각주 참조 표시에 장식 추가
rngBody.Expand Unit:=wdCharacter
If 앞장식문자 <> "" Then rngBody.InsertBefore (앞장식문자)
If 뒷장식문자 <> "" Then rngBody.InsertAfter (뒷장식문자)
rngBody.Style = ActiveDocument.styles("각주 참조")
 
' 각주의 각조 참조 표시를 범위로 지정
Set rngFootnote = Selection.Range
rngFootnote.StartOf Unit:=wdParagraph, Extend:=wdMove
 
' 각주의 각주 참조 표시에 장식 추가
rngFootnote.Expand Unit:=wdCharacter
If 앞장식문자 <> "" Then rngFootnote.InsertBefore (앞장식문자)
If 뒷장식문자 <> "" Then rngFootnote.InsertAfter (뒷장식문자)
rngFootnote.Style = ActiveDocument.styles("각주 참조")
 
Exit Sub
 
ErrorHandler:
    ActiveDocument.Undo
    objUndo.EndCustomRecord
    If Err.Number <> 0 Then
        MsgBox (Err.Description)
    End If
    Exit Sub
 
End Sub

1.3 설정 방법 ① 해당 워드 프로그램에서 삽입하는 모든 각주에 장식을 붙이는 경우

이 블로그의 다른 포스트 [VBA 매크로 실행, 바로 가기 키 연결 방법]에서 워드 VBA를 편집하고 실행하는 방법을 설명하고 있습니다. 여기서는 간단히만 설명하고, 예시 화면이나 자세한 설명은 위 포스트를 참고하기 바랍니다.

Alt+F11을 눌러 VBA 편집기를 엽니다[참고 예시: ① 편집기 열기].

프로젝트 탐색기 > Normal > 모듈에 NewMacros나 Mdule1과 같은 모듈이 이미 있으면, 그 모듈을 더블클릭하여 편집창을 엽니다. 만약 모듈이 보이지 않으면, 프로젝트 탐색기에서 Normal을 우클릭한 후 삽입(N) > 모듈(M)을 선택하여 새로운 모듈을 하나 만듭니다[참고 예시: ② 매크로 설정 모듈 선택].

ⓒ [1.2 매크로 스트립트]에서 코드를 복사한 후 편집창에 붙여 넣습니다[참고 예시: ③ 코드 복사 및 편집].

끝났습니다. 

1.4 설정 방법 ② 해당 워드 프로그램에서 특정한 경우만 각주에 장식을 붙이는 경우

이 블로그의 다른 포스트 [VBA 매크로 실행, 바로 가기 키 연결 방법]에서 워드 VBA를 편집하고 실행하는 방법을 설명하고 있습니다. 여기서는 간단히만 설명하고, 예시 화면이나 자세한 설명은 위 포스트를 참고하기 바랍니다.

Alt+F11을 눌러 VBA 편집기를 엽니다[참고 예시: ① 편집기 열기].

프로젝트 탐색기 > Normal > 모듈에 NewMacros나 Mdule1과 같은 모듈이 이미 있으면, 그 모듈을 더블클릭하여 편집창을 엽니다. 만약 모듈이 보이지 않으면, 프로젝트 탐색기에서 Normal을 우클릭한 후 삽입(N) > 모듈(M)을 선택하여 새로운 모듈을 하나 만듭니다[참고 예시: ② 매크로 설정 모듈 선택].

ⓒ [1.2 매크로 스트립트]에서 코드를 복사한 후 편집창에 붙여 넣습니다[참고 예시: ③ 코드 복사 및 편집]. 이때 프로시저 이름은 InsertFootnoteNow가 아닌 '장식각주삽입' 등 다른 이름으로 바꾸어야 합니다(이렇게 해야 기본적인 각주 삽입이 방해받지 않습니다).

1
 
1
Sub InsertFootnoteNow()
' 아래 예시처럼 InsertFootnoteNow가 아닌 다른 이름으로 변경합니다.
Sub 장식각주삽입()

 

파일 메뉴 > 옵션 > 리본 사용자 지정에서 바로 가기 키 : 사용자 지정(T)을 선택하고, 범주(C)를 매크로로, 매크로(O)를 방금전 변경한 이름(장식각주삽입 등)의 매크로로 지정합니다. 그리고 새 바로 가기 키(N) 아래 입력 칸을 클릭하고 원하는 바로 가기 키를 입력합니다. 예시 화면은 [참고 예시: 2.3.1 설정 방법]을 참고하기 바랍니다.

끝났습니다. 이제 장식을 붙여야 하는 경우에는 지정한 바로 가기 키를 입력하면 됩니다.

1.5 설정 방법 ③ 특정 문서에서만 각주에 장식을 붙이는 경우

이 블로그의 다른 포스트 [VBA 매크로 실행, 바로 가기 키 연결 방법]에서 워드 VBA를 편집하고 실행하는 방법을 설명하고 있습니다. 여기서는 간단히만 설명하고, 예시 화면이나 자세한 설명은 위 포스트를 참고하기 바랍니다.

매크로를 설정할 문서를 '대상문서.docx'라 하겠습니다.

Alt+F11을 눌러 VBA 편집기를 엽니다[참고 예시: ① 편집기 열기].

ⓑ 프로젝트 탐색기의 Normal이 아닌 Project (대상문서)우클릭한 후 삽입(N) > 모듈(M)을 선택하여 새로운 모듈을 하나 만듭니다[참고 예시: ② 매크로 설정 모듈 선택].

ⓒ [1.2 매크로 스트립트]에서 코드를 복사한 후 편집창에 붙여 넣습니다[참고 예시: ③ 코드 복사 및 편집].

끝났습니다. 대상 문서에서 바로 가기 키(Ctrl+Alt+F)나 메뉴(참조 탭 > 각주 삽입)로 각주를 삽입하면 매크로의 InsertFootnoteNow가 먼저 실행되면서 장식이 붙습니다.

주    의

매크로가 포함된 파일(docm)은 악성코드 등을 실행할 수 있으므로, 본인이 직접 만든 것이거나 신뢰할 수 있는 출처(지인)으로부터 받은 것만 열어야 합니다.

다만 매크로가 삽입된 문서는 docx가 아닌 docm 형식으로 저장되어야 합니다('대상문서.dotm'). 바로 저장하면 아래와 같이 매크로 제외 문서(docx)로 저장할지를 다시 한번 확인하는데, 이때 아니오(N)를 누르면 dotm 형식으로 저장됩니다.

[1.5.A] 문서에 설정된 매크로를 지울지 확인합니다.

그리고 '대상문서.docm'을 열면 아래와 같이 보안 알림 메시지가 다시 나옵니다. 이때 매크로 포함(E)를 선택하면 매크로가 삭제되지 않습니다.

[1.5.B] docm 문서를 열면 매크로를 포함하여 열지 확인하게 됩니다.

특정 문서에서 1) 또는 [1]과 같이 각주에 장식을 붙여야 하는 경우 이 방식을 사용하면 이 문서를 편집하는 누구든 쉽게 장식이 추가된 각주를 삽입할 수 있습니다. 다만 문서에 매크로를 포함시켜야 하는 관계로, 본인 또는 신뢰할 수 있는 사용자들 사이에서만 사용해야 합니다.

2. 각주 참조 간격 변경 매크로

이 매크로는 각주를 입력할 때 각주 참조 번호 다음의 공백 1칸을 지우고 탭을 입력하는 것입니다.

[1. 각주 장식 추가 매크로]와 기본 구성은 동일하므로, 사용자가 원하는 사용범위에 따라 설정을 다르게 하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub InsertFootnoteNow()
' 기본 각주 형식을 유지하려면 InsertFootnoteNow를 다른 이름으로 변경하세요
 
On Error GoTo ErrorHandler
 
Dim objUndo As UndoRecord
Set objUndo = Application.UndoRecord
objUndo.StartCustomRecord ("각주 참조 간격 변경")
 
' 각주 삽입
ActiveDocument.Footnotes.Add Range:=Selection.Range
 
' 각주 참조 번호 다음의 공백을 탭으로 변경
With Selection
    .TypeBackspace
    .InsertAfter vbTab
    .Collapse Direction:=wdCollapseEnd
End With
 
Exit Sub
 
ErrorHandler:
    ActiveDocument.Undo
    objUndo.EndCustomRecord
    If Err.Number <> 0 Then
        MsgBox (Err.Description)
    End If
    Exit Sub
 
End Sub

 

만약 각주 장식 추가와 동시에 사용하고 싶다면, [1.2 매크로 스크립트] 장식 추가 매크로의 22번줄에 다음 6줄의 코드를 추가하면 됩니다.

22
23
24
25
26
27
' 각주 참조 번호 다음의 공백을 탭으로 변경
With Selection
    .TypeBackspace
    .InsertAfter vbTab
    .Collapse Direction:=wdCollapseEnd
End With

 

최초 게시 : 2021. 2. 7.