본문 바로가기

개발 도구/VBA 매크로

메모 작성자 변경 매크로 ① 기본, 응용 코드 설명

워드 자체 기능에서는 메모 작성자를 사후적으로 변경할 수 없으므로, 매크로를 사용해야 합니다. 이 포스트에서는 기본적인 스크립트와 함께 약간 응용된 스크립트의 사용방법을 설명합니다.

매크로를 실행하는 방법은 ① VBA 편집기에서 직접 실행 또는 ② 매크로 대화상자에서 실행하거나, ③ 매크로를 바로 가기 키와 연결 또는 ④ 리본 메뉴에 추가하는 방법 등이 있습니다. [VBA 매크로 실행, 바로 가기 키 연결 방법]에서 이 포스트의 매크로를 예시로 위 3가지 실행방법을 설명하고 있습니다.

1. 기본 스크립트 설명

※ 이 부분 코드는 [VBA 매크로 실행 2.1 편집기에서 직접 실행]에서 설명하는 방식으로 실행하면 됩니다.

메모는 VBA에서 Comment라는 객체이며, Comments라는 메모의 컬렉션(집합)에서 인덱스를 지정하여 호출할 수 있습니다. Comment의 속성 중 author가 '사용자 이름'에, initial이 '이니셜'에 해당합니다.

① 우선 간단하게 현재 열려 있는 문서에서 메모 전체의 작성자를 변경하는 매크로 스크립트를 설명하겠습니다.

현재 열려 있는 문서(ActiveDocument)의 메모들(Comments)에서, 각 메모를 순서대로 순환하며 작성자와 이니셜을 변경합니다. VBA에서 "For ~ Next"는 For 다음에서 제시한 조건에 따라 그 사이의 구문을 반복하여 실행하는 반복문이고, "Each ~ In"은 In 다음의 집합, 배열 등에서 요소를 하나씩 순서대로 꺼내는 것입니다. 아래 스크립트는 순서대로 꺼낸 Comment를 '메모'라는 이름으로 할당한 후 해당 메모의 작성자나 이니셜을 별도의 조건을 확인하지 않고 바로 바꾸는 것입니다(5,6행).

"새 작성자"와 "새 이니셜"을 원하는 내용을 바꾸어 실행하면 됩니다. 끝났습니다.

  • VBA에서도 문자열은 겹 따옴표(" ")안에 표시합니다. 가령 메모의 작성자(사용자 이름)를 김 변호사로 바꾸고 싶다면, "새 작성자"를 "김 변호사"로 바꾸면 됩니다. 겹 따옴표는 김 변호사 양쪽에 있어야 하며, "김 변호사김 변호사"는 에러가 발생합니다.
1
2
3
4
5
6
7
8
9
10
Sub 전체메모작성자변경()
 
    For Each 메모 In ActiveDocument.Comments
 
        메모.author = "새 작성자"
        메모.initial = "새 이니셜"
 
    Next 메모
 
End Sub

 

② 다음으로, 특정 작성자나 이니셜만 변경하는 경우를 설명하겠습니다.

VBA에서 "If ~ Then ~ End If"는 If 다음의 조건이 참(True)이면 Then 부터 End If 까지의 구문을 실행합니다. 현재 열려 있는 문서의 메모들에서 각 메모를 순환하면서(3~13행), 만약 메모의 작성자가 "바꿀 작성자"라면 속성 변경을 통해 그 작성자를 "새 작성자"로 변경합니다(5~7행). 이니셜도 동일합니다(9~11행).

"바꿀 작성자", "새 작성자", "바꿀 이니셜", "새 이니셜"을 원하는 내용으로 바꾸어 실행하면 됩니다. 이니셜을 변경할 필요가 없으면 9~11행을 지우면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub 특정메모작성자변경()
 
    For Each 메모 In ActiveDocument.Comments
 
        If 메모.author = "바꿀 작성자" Then
            메모.author = "새 작성자"
        End If
        
        If 메모.initial = "바꿀 이니셜" Then
            메모.initial = "새 이니셜"
        End If
 
    Next 메모
 
End Sub

 

보통 이니셜은 잘 신경쓰지 않기 때문에, '문장 안에 표시'로 하여 보면 다양하고 흥미로운 각종 이니셜을 볼 수 있습니다. 사용자 이름을 변경할 때 이니셜도 아예 동일하게 변경해 놓는 것도 한 방법입니다(아래 코드).  끝났습니다.

1
2
3
4
5
6
7
8
9
10
11
12
Sub 특정메모작성자변경2()
 
    For Each 메모 In ActiveDocument.Comments
 
        If 메모.author = "바꿀 작성자" Then
            메모.author = "새 작성자"
            메모.initial = "새 작성자"
        End If
 
    Next 메모
 
End Sub

 

2. 응용 스크립트 설명

메모 작성자를 변경할 일이 잦거나 여러 종류의 메모를 동시에 변경할 때 그때그때 상황에 맞게 스크립트를 고쳐서 쓰는 것은 불편합니다. 스크립트를 직접 수정할 필요없이 여러 상황에 맞춰 변경할 수 있도록 매크로 스크립트를 작성하였습니다. 따로 폼을 쓰지 않고 단순히 모듈로만 실행되도록 하기 위해 Inputbox를 여러 번 호출하는 것으로 구성하였습니다.

2.1 설치 및 실행 방법

응용 스크립트는 추후 다른 포스트에서 별도로 기능을 설명할 예정이며, 우선 아래의 첨부파일을 열어서 코드를 사용하시기 바랍니다. 이 부분 코드는 필요할 때 ① VBA 편집기나 ② 매크로 대화상자에서 실행하거나 ③ 바로 가기 키 연결, 또는 ④ 리본메뉴 추가 등의 방법으로 사용할 수 있습니다. [VBA 매크로 실행 2. 워드 VBA 실행 방법]의 4가지 방법 중 편한 방법을 사용하면 됩니다.

CmtAuthorChanger.txt
0.00MB

2.2 사용방법

먼저 다음의 사례를 보겠습니다. 법무법인 A에서 내부적으로 검토를 하면서 일부는 미리 '사용자 이름'을 '법무법인 A'로 바꾼 후 메모를 작성하였으나, 미리 바꾸지 않았던 '김 변호사'와 '이 변호사'는 자신의 사용자 이름이 그대로 메모 작성자로 남았습니다. 이 문서를 외부로 보내기 위해 '김 변호사'와 '이 변호사'를 '법무법인 A'로 바꾸고자 합니다.

매크로가 실행되면 문서내 모든 메모(Comment)의 사용자 이름과 이니셜을 구분하여 정리한 후 각 종류별로 번호를 붙여 띄웁니다. 변경하고자 하는 메모 종류의 번호를 입력하면 됩니다. 사례에서는 2번과 3번을 동시에 바꾸려는 것이므로 2,3을 입력한 후 확인을 누릅니다.

  • 입력된 번호가 없는 번호인 경우에는 친절한 음성 안내없이 단호하게 종료합니다. 제대로 된 번호를 입력할 때까지 반복해주는 과잉친절은 고문이 될 것 같았습니다.
  • 여러 종류의 메모를 동시에 변경하려면 '1,2,3'과 같이 번호 사이를 ','로 구분하여 입력합니다. '1,2,3,'이나 '1-2'은 에러가 나면서 종료합니다. 
  • 모든 메모를 동시에 변경할 때는 '0'만 입력하면 됩니다.

'2,3'에 해당하는 메모 종류가 제시되면, 변경하려는 '사용자 이름'을 입력합니다. 사례에서는 법무법인 A를 입력한 후 확인을 누릅니다.

여기서 끝이 아닙니다. 이니셜을 잘 쓰지는 않으나 때로는 바꿀 필요도 있으므로 일단 이니셜도 입력하도록 하였습니다. 다만 이니셜을 구분하여 쓰는 경우는 많지 않으므로 앞에서 입력한 '사용자 이름'이 미리 입력되어 있도록 하였습니다. 다른 것으로 변경할 것이 아니라면 바로 확인을 누릅니다.

친절하게 총 몇 개의 메모가 변경되었다는 메시지까지 보여주고 종료합니다.

  • 매크로 실행 중 위 입력상자가 나왔을 때 취소ESC를 누르면 실행이 중단됩니다. 또는 Ctrl+Pause/Break를 눌러 강제 종료하는 방법도 있습니다. 물론 아래 메시지가 나왔을 때는 이미 늦었습니다.

아래에서 보는 것처럼 종전의 '김 변호사'와 '이 변호사'가 모두 '법무법인 A'로 변경되었습니다.

 

최초 게시일 : 2020. 8. 6.