오늘의 뉴스레터 소재는 오피스튜터의 나눔터 섹션에서 워드
묻고 답하기에 올린 질문 중 하나를 골라 보았습니다. 질문의 내용은 다음과 같습니다.
[질문]
문서를 작성 후 개정시 사람마다 틀리는 부분이 있어 이를 알려주려고 하는데 좋은 방법은 없을까요?
우선 생각한 것이 파일을 열 때에 주의사항을 알리는 메시지를 보이게 하면 어떨까 해서요
또 다른 방법을 잘 활용하고 계신 분이 있으면 도움을
청합니다.
애로사항이 많아 문의하오니 될 수 있는 방법을 가르쳐 주시면 감사하겠습니다.
[답변]
제가 이해한 질문의 내용을 요약하자면 A가 전달내용을 추가하여 문서를 B에게 보내면 B는 전달받은
내용에 무언가를 추가하여 그 문서를 C에게 전달하도록 하자는 내용입니다. 마치 수건 돌리기를 하는
듯한 느낌입니다.
보통 무언가를 사용자에게 알리려면 MsgBox를 사용합니다.
그러나 이 경우에는 사용자가 표시하는 내용을 수정하여 이 문서를 다른 사람이 열어 보는 경우 수정한
내용을 알려주어야 하는 겁니다. 그래서 수정 가능하도록 전달내용을 표시하기 위해 TextBox
컨트롤을 이용하였습니다.
전달매체는 TextBox 컨트롤로 정해졌으니 이제는 전달내용을
어디에 저장하느냐가 문제일겁니다. 오피스문서에는 등록정보 또는 속성이라는 것이 있습니다. 지금 워드를
열어 파일-속성(또는 등록정보)을 클릭하면 다음과 같은 대화상자를 볼 수 있습니다.
즉 위 그림의 요약 탭에서 메모라는
기본제공 등록정보를 이용하면 됩니다. 즉 여기의 내용을 TextBox컨트롤을 통해 보여주고 다시
수정한 내용은 메모 등록정보에 기록합니다.
그리고 TextBox컨트롤에 수정한 내용은 다시 문서의
등록정보(메모)에 저장합니다.
문서의 등록정보에는 여러 가지 내용을 담고 있습니다. 크게
등록정보에는 기본제공 문서정보(BuiltinDocumentProperties)와 사용자가 만드는
문서정보(CustomDocumentProperties)로 나눕니다.
[메모]는 기본제공
문서정보(BuiltinDocumentProperties)에 해당합니다. 그리고
BuiltinDocumentProperties의 Parent개체는 Document입니다.
|
다음의 코드는 위의 Userform에 대한 코드입니다.
Userform은 TextBox콘트롤, CommandButton으로 구성되어 있습니다.
Userform1 |
Private Sub
CommandButton1_Click()
'// TextBox컨트롤의 내용을 [메모]로 가져 옵니다
ThisDocument.BuiltInDocumentProperties _
(WdBuiltInProperty.wdPropertyComments) =
TextBox1.Text
Unload Me
End Sub
Private Sub UserForm_Initialize()
With TextBox1
'// 여러 줄을 입력할 수 있도록
'// MultiLine속성을 True로 바꿉니다
.MultiLine = True
'// 여러 줄을 입력하는 경우 Enter 키를 사용하여
'// 줄을 바꾸도록 합니다
.EnterKeyBehavior = True
'// [메모]내용을 TextBox컨트롤로 가져 옵니다
.Text = ThisDocument.BuiltInDocumentProperties _
(WdBuiltInProperty.wdPropertyComments)
End With
End Sub |
Userform이 시작하면 Initialize이벤트가 발생하고
여기에서 [메모]등록정보를 컨트롤에 입력합니다. 그리고 TextBox컨트롤의 두 가지 속성을
변경합니다.
여러 행을 처리하도록 MultiLine속성을 True로 바꾸고
다음 행을 입력하기 위해 EnterKeyBehavior속성을 True 로 지정합니다. 보통 이것의
속성은 False인데 이때 Enter키는 Tab키와 같은 기능을 합니다.
위의 Userform을 실행하면 다음과 같습니다.
그리고 문서가 열릴 때 이 Userform이 자동으로
실행되도록 하기 위해 ThisDocument의 Document_Open 이벤트를 이용합니다.
다음과 같습니다.
ThisDocument |
Private Sub
Document_Open()
UserForm1.Show
End Sub |
|