※ 오늘 Daily Tip은 곽승주님이 제공해주신 내용입니다.
필자는 지난
1995년부터 워드를 사용해오고 있습니다.
그러나 단순히 글만 달랑 쓰는 용도라서 세월에 비해 워드 실력은 신통치 않습니다.
예전부터 느낀 것이지만 워드의 불편한 점
중 하나는 문서를 열면 늘 첫 페이지가 보인다는 점입니다.
페이지 수가 많은 경우 글을
입력 또는 편집한 마지막 위치를 찾느라 [PgDn]키가
바쁩니다. 그래서 지난 주에는 섹시한 본드 걸(Bond
Girl)이 대신 '워드 걸(Word
Girl)'의 자문을 구했습니다. 워드 걸(Word
Girl) 가라사대,
'[Shift]+[F5]
키를 누르거라.
그리하면 단숨에 이동하리라.'
[Shift]+[F5]단축 키를 누르면
마지막 위치를 찾아간다고 하더군요. 땡큐 워드 걸(Word
Girl)!
그래서 오늘은 워드
매크로를 이용하여 문서를 열 때마다 마지막 입력/편집
위치를 찾아가는 방법을 알아 봅니다.
단축 키
[Shift]+[F5]에 해당하는 매크로는
Application.GoBack입니다. (뭘
고백한다고… ㅡㅡ;) 그러면 문서를 열 때마다 얘를
실행해주면 됩니다. 즉 문서를 열 때 발생하는 이벤트
프로시저에 이 한 줄의 코드를 넣어주면 됩니다.
엑셀과 달리 워드
VBA에서는 모든 문서가 Normal.dot라는
기본 서식파일을 참조합니다.
위의 그림은 워드VBA
탐색기의 내용입니다. 현재 작성중인
문서 이름은 "뉴스레터_2004-01-26.doc"입니다.
그리고 '참조'라는
폴더에 '참조대상Normal'이
이 문서가 Normal.dot를 참조하고 있는 문서임을
알려주고 있습니다.
Normal.dot은 워드가 실행하면 자동으로
불러오는 서식파일이며 엑셀의 ThisWorkbook에
해당하는 개체가 ThisDocument입니다.
이 개체의 이벤트 프로시져로는
Document_New, Document_Open, Document_Close가
있습니다.
파일메뉴의
새로 만들기를 클릭하거나
표준도구모음의 새 문서를 클릭하면
실행되는 이벤트 프로시져가 Document_New입니다.
또 문서를 여는 경우
Document_Open, 문서를 닫는 경우
Document_Close이벤트 프로시져가 실행됩니다.
물론
Application.GoBack은
Document_Open 이벤트 프로시져에 있어야
문서를 열 때 마지막 입력/편집 위치로 이동하게 됩니다.
Private Sub Document_Open()
Application.GoBack
End Sub |
그러나 사전에 알아
두어야 할 점은 Application.GoBack은 문서를
최근에 저장한 마지막 위치도 변경합니다.
문서를 입력/편집하다가 저장하지 않았다면 그
이전(입력/편집
전)의 위치로 이동합니다.
만일
Application.GoBack이 없었다면 필자는 책갈피(Bookmark)기능을
이용하여 다음과 같이 만들었을 겁니다.
Private Sub Document_Close()
Dim bmk As Bookmark
On Error Resume Next
Set bmk = ActiveDocument.Bookmarks("단풍잎책갈피")
If Not bmk Is Nothing Then
bmk.Delete
With ActiveDocument.Bookmarks
.Add Range:=Selection.Range, Name:="단풍잎책갈피"
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
Set bmk = Nothing
End Sub |
문서를 닫을 때
'단풍잎책갈피'라는
이름의 BookMark가 있는 지 확인하고,
그것이 존재한다면 '단풍잎책갈피'라는
이름의 BookMark를 지웁니다.
그리고 다시 '단풍잎책갈피'라는
이름의 BookMark를 추가합니다.
bmk는
Bookmark개체 변수로서 Set
bmk = ActiveDocument.Bookmarks("단풍잎책갈피")으로
현재 닫으려는 문서의 "단풍잎책갈피"
책갈피를 저장합니다. 그러나
"단풍잎책갈피"가 없다면
bmk는 Nothing의 상태가 됩니다.
Nothing의 상태라면 갈등할 필요 없이 새로운 "단풍잎책갈피"를
Bookmarks컬렉션 개체에 Add합니다.
그러나 이미
"단풍잎책갈피"가 있다면 이를 먼저 지워줘야
하겠죠. 다음의 코드는 그런 일을 합니다.
If Not bmk Is
Nothing Then bmk.Delete
Private Sub Document_Open()
On Error Resume Next
Selection.GoTo What:=wdGoToBookmark,
Name:="단풍잎책갈피"
On Error GoTo 0
End Sub |
이제 문서를 여는 경우 닫을
때 저장한 Bookmark를 찾아가도록 합니다.
만일 '단풍잎책갈피'라는
이름의 Bookmark가 없는 경우 에러가 발생합니다.
그래서 On Error Resume Next로
계속 다음 코드를
진행하도록 만듭니다.
Application.GoBack과 마찬가지로
Bookmark를 이용하는 경우에도 최근에 저장한 위치로 이동합니다.
Bookmark정보는 ActiveDocument에
저장되기 때문에 문서를 저장하지 않는다면 당연히 입력 포인터가 위치한 위치로 이동하지 않습니다.
|