2013-02-07 3 views
2

파일 이름, 저장 날짜 및 페이지 번호 필드와 각 텍스트 사이의 텍스트를 포함하는 Word 2010 페이지 헤더를 수정하려고합니다. 예 : 파일 이름 + "" + 날짜 저장 + 탭 + 페이지 번호. 그러나, 나는 그들의 적당한 장소에있는 끈을 얻는 것을 보일 수 없다. 내가 지금까지 가지고하는 것은 이것이다 : 그러나.Select를 사용하지 않고 Word 2010 헤더에 텍스트 및 필드 삽입

Sub CreateHeader() 
    Dim myRange As Range 
    With ActiveDocument 
     Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range 
     .Fields.Add Range:=myRange, Type:=wdFieldFileName, PreserveFormatting:=True 
     myRange.Collapse wdCollapseEnd 
     myRange.InsertAfter (" ") 
     myRange.Collapse wdCollapseEnd 
     .Fields.Add Range:=myRange, Type:=wdFieldSaveDate, Text:="\@ YYYY-MM-DD", PreserveFormatting:=True 
     myRange.InsertAfter (Chr(9)) 
     myRange.Collapse wdCollapseEnd 
     .Fields.Add Range:=myRange, Type:=wdFieldPage, PreserveFormatting:=True 
    End With 
End Sub 

, 하위를 실행 한 후, 다른 부분은 없습니다 내가하고자했다입니다. 대신 파일 이름 + "+ 탭 + 페이지 번호 + 저장 날짜로 표시됩니다. 여기서 내가 뭘 잘못하고 있니? 가능하다면 .Select에 의지하지 않는 것이 좋습니다.

(I 최근 a similar question 물었다 있습니다.)

답변

3

나는 당신의 문제는 여기에 당신이 빈, 단순히 첫 번째 (빈) 문자, 헤더 텍스트에 myRange 변수를 설정한다는 사실에서 유래 생각 . Savedate를 추가하면 원래의 범위를 벗어나는 것 같습니다. 코드를 작동 시키려면 두 가지를 추가해야합니다.

첫 번째로 삽입 할 때마다 끝까지 접기를 원하지만 SaveDate를 삽입 한 후 머리글 범위 (myRange 변수)를 헤더에 다시 정의해야합니다.

약간 추한 것이지만 다음 코드는 원하는대로 처리하는 것 같습니다. 코드에 마지막으로 wdCollapseEnd을 넣지 않으면 작동하지 않습니다.

마지막으로 수동으로 직접 필드를 업데이트 할 필요가 없도록 마지막으로 필드를 업데이트합니다.

Sub CreateHeader() 
    Dim myRange As Range 
    With ActiveDocument 
     Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range 
     .Fields.Add Range:=myRange, Type:=wdFieldFileName, PreserveFormatting:=True 
     myRange.Collapse wdCollapseEnd 
     myRange.InsertAfter (" ") 
     myRange.Collapse wdCollapseEnd 
     .Fields.Add Range:=myRange, Type:=wdFieldSaveDate, Text:="\@ YYYY-MM-DD", PreserveFormatting:=True 
     Set myRange = .Sections(1).Headers(wdHeaderFooterPrimary).Range 
     myRange.Collapse wdCollapseEnd 
     myRange.InsertAfter (Chr(9)) 
     myRange.Collapse wdCollapseEnd 
     .Fields.Add Range:=myRange, Type:=wdFieldPage, PreserveFormatting:=True 
     myRange.Fields.Update 
End With 

최종 하위

+0

감사 무리 @CuberChase. 매우 도움이되는 대답. –

+1

문제가 없으므로 Word는 이와 같이 작업 할 때 예측할 수없는 일들을 수행 할 수 있으므로 거의 무너 뜨릴만한 가치가 있습니다. :) – CuberChase