배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Word 버전:   공통
검색어:   워드 매크로, 입력/편집 위치
제목:   나는 네가 지난 편집때 저장한 위치를 알고 있다!
     
 

새 페이지 1

  STEP> 따라하기
 

※ 오늘 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에 저장되기 때문에 문서를 저장하지 않는다면 당연히 입력 포인터가 위치한 위치로 이동하지 않습니다.