我正在通过宏构建索引,稍后,页码开始变得不稳定。起初,它们是正确的,但随着我们在文档中更深入,它们开始被抵消。
我有预感,因为我正在使用的代码使用范围(.Index.MarkEntry Range:=theRange ...
),而范围的 end 的页面是页码的来源。
如何确保索引使用的页码是具有该范围中第一个字符的页面(这是否有意义?条目开始的任何页面,是我想要使用的页面)。< / p>
这是我的(截断相关性)代码:
Sub Find_Definitions()
Dim myDoc As Word.Document
Dim oRng As Word.Range, rng As Word.Range, rngXE As Word.Range, tempHold As Word.Range
Dim addDefinition$, findText$, editedDefinition$
Dim meanTypes() As Variant
Dim rngEdited
Dim y&
Dim bFound As Boolean
meanTypes = Array(Chr(150) & " means", Chr(151) & " means", "- means", Chr(150) & " meaning", Chr(151) & " meaning", "- meaning")
Set myDoc = ActiveDocument
bFound = True
Call Clear_Index
For y = LBound(meanTypes) To UBound(meanTypes)
'Loop through the document
Set oRng = myDoc.Content
Set rngXE = oRng.Duplicate
With oRng.Find
.ClearFormatting
.ClearAllFuzzyOptions
'.Text = findText
.Text = meanTypes(y)
.MatchCase = False
.Wrap = wdFindStop
End With 'orng.find
Do While bFound
bFound = oRng.Find.Execute
If bFound Then
Set rngXE = oRng.Paragraphs(1).Range.Duplicate
rngXE.Select
' Here's where I could check the text, and see if it starts with Roman numerals.
editedDefinition = Check_For_Roman_Numerals(rngXE, findText)
If editedDefinition <> "" Then 'If editedDefinition is empty, that means there's no definition to add to the index
Set rngEdited = rngXE.Duplicate
With rngEdited
.moveStart unit:=wdCharacter, Count:=x
.Select
‘ This next line is my idea that the range’s page number is being used, so I just wanted to print it to see.
Debug.Print rngEdited.Information(wdActiveEndPageNumber)
End With 'rngEdited
myDoc.Indexes.MarkEntry Range:=rngEdited, entry:=editedDefinition, entryautotext:=editedDefinition
End If ''editedDefinition <> ""
oRng.Collapse wdCollapseEnd
oRng.Start = oRng.Paragraphs(1).Range.End
oRng.End = myDoc.Content.End
rngEdited.Collapse wdCollapseEnd
rngEdited.End = myDoc.Content.End
' Set rngXE = Nothing
End If 'bFound
Loop
bFound = True
Next y
TheEnd:
Set rng = Nothing
myDoc.Indexes(1).Update
MsgBox ("Added all definitions.")
End Sub
我在想我需要做的是“收紧”editedRange
,所以它会在同一页面上结束?但如果定义跨越分页符,我想使用它出现的较小的页码(第一个)。
感谢您的任何想法/提示/想法。
答案 0 :(得分:1)
通常,当索引中的页码与您期望的页码不匹配时,因为文档显示的内容不会出现在打印结果中。这会影响屏幕上的分页,&#34;推送&#34;内容&#34; down&#34;在文件中。大多数情况下,原因是字段代码,可以通过按Alt + F9来抑制字段代码,直到显示字段结果。
但是,此方法不适用于XE(索引标记)和其他一些字段类型,以及隐藏文本。只要显示&#34;隐藏&#34;它们就会显示文本是允许的。根据文件/选项/显示/&#34中的设置;始终在屏幕上显示这些格式标记&#34;点击&#34;向后P&#34;功能区主页选项卡中的按钮可能会也可能不会将其关闭。如果没有,那么你必须进入选项来进行显示,或者创建一个宏来执行此操作并根据需要运行它。
另一个可能的原因是,以编程方式生成的XE字段插入了一系列文本的末尾,这些文本突破到另一个页面,而不是在文本开始的页面上。为了确保字段是开始,而不是范围的结束,将范围折叠到其起点:
rngEdited.Collapse wdCollapseStart