큰 문서를 템플릿으로 조각하고 있습니다. 각 템플릿에는 바닥 글에 #OVERALLPAGENUMBER#
이라는 키워드가 있습니다.이 바닥 글은 Excel VBA를 프로그래밍 방식으로 필드로 대체합니다. 이 코드를 테스트 한VBA를 사용하여 Word에서 중첩 된 필드 설정
Dim storyRange As Object 'Word.Range
For Each storyRange In oDoc.StoryRanges
Do
With storyRange.Find
.Text = "#OVERALLPAGENUMBER#"
.Wrap = 1 'wdFindContinue
.Execute
While .found
storyRange.Fields.Add Range:=storyRange, Type:=-1, Text:="PAGE", PreserveFormatting:=True
.Execute
Wend
End With
On Error Resume Next
Set storyRange = storyRange.NextStoryRange
On Error GoTo 0
Loop While Not storyRange Is Nothing
Next
를, 그리고 성공적으로 바닥 글에 페이지 번호를 박았 : 내가 필요한 모든 해당 문서의 페이지 번호 인 경우
, 다음은 충분합니다. 그러나 내가 원하는 것은 중첩 된 (수식) 필드로 고정 된 번호를 페이지 번호에 추가하여 여러 문서에 페이지 수를 표시 할 수 있습니다. 내 솔루션, 내가 (Ctrl + F9를 사용하여) 수동으로 할 경우, 다음과 같이 필드 코드를 제공합니다
{ = 5 + { PAGE } }
을 올바르게 등 2 페이지에 "7", 1 페이지의 "6"생산을 ..
아무리 노력해도 VBA를 사용하여 이러한 유형의 필드 중첩을 복제 할 수 없습니다. (매크로 레코더는 여기서는 쓸모가 없다.) 누구든지 프로그래밍 방식으로이 필드를 만드는 방법을 찾을 수 있습니까?
솔루션
내 문제는 PreserveFormatting:=True
을 갖는 다른 내에서 둥지에 내 시도의 방법으로 하나 개의 필드를 받고 있었다이었다. 이제 다음의 간단한 솔루션은 작동합니다
With storyRange.Find
.Text = "#POLICYPAGENO#"
.Wrap = 1 'wdFindContinue
.Execute
While .found
storyRange.Select
With oDoc.ActiveWindow
.Selection.Fields.Add Range:=.Selection.Range, Type:=-1, Text:="PAGE", PreserveFormatting:=False
.Selection.MoveLeft Unit:=1, Count:=1, Extend:=1
.Selection.Fields.Add Range:=.Selection.Range, Type:=-1, PreserveFormatting:=False
.Selection.TypeText Text:="= " & OverallPageNumber & " +"
End With
.Execute
Wend
End With
글쎄, 내 find 메서드는 텍스트를 자동으로 선택하지 않았으므로 배트에서 작동하지 않았습니다. 그런 다음 처음에'storyRange.Select'를 실행하도록 코드를 수정했으나 그 코드는 모두 평범한 텍스트 주위에 두 개의 빈 필드를 삽입하여 {{* * MERGEFORMAT} = 5 + {\ * MERGEFORMAT} PAGE' – Alain
이제 'storyRange.Select' 다음에 첫 번째 필드가 추가 된 후에 필드 코드 안에'Selection'을 옮겨 놓기 만하면됩니다. 문서를 보지 않고서는 조금 어렵지만'Selection.MoveLeft Unit : = wdCharacter, Count : = 1'과 같은 것입니다. '\ * MERGEFORMAT' 때문에 작동하지 않을 수도 있습니다. – CuberChase
업데이트 된 답변을 참조하십시오. 이제'storyRange.Select'를 사용하면 이것이 효과가 있다고 생각합니다. – CuberChase