Makro üzerinden bir dizin yapıyorum ve biraz sonra sayfa numaraları kazık almaya başlar. İlk başta doğrular, ama belgeye daha derine girdiğimizde, ofsetleşmeye başlıyorlar.Dizin hatalı sayfa numaraları var.
ben kullanıyorum kod aralığı (.Index.MarkEntry Range:=theRange ...
) kullandığı için bu kadar bir önsezi ve sayfa numarası nereden geldiğini aralığının olan sonu sayfası vardır.
Dizinin kullandığı sayfa numarasının, aralıktaki ilk karaktere sahip sayfa olduğundan emin olun (bu anlamlıdır mu? Girdi hangi sayfa açılır, sayfam kullanmak istiyorum). İşte
benim kod (alaka için kesilir) oluyor: Yapmam gerekenler aşağıda düşünüyorumSub 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
aynı sayfada biter böylece editedRange
"germek" için mi? Ancak bir tanım bir sayfa aralığına yayılıyorsa, görünen sayfa numaralarından daha küçük olanını kullanmak istiyorum (ilki).
Her türlü fikir/ipucu/düşünce için teşekkürler.
Sadece Endeksi girişi ... –
oluşturmadan önce başlangıç noktasına Aralığı daraltmak @ CindyMeister - Bu RngEdited.Start = oRng.paragraphs (1) .Range.End' yapmak anlamına mı? Hala kafamı, sözcüğün kullanım aralığını nasıl değiştirdiği konusunda sardım ve yardımın için minnettarım! – BruceWayne
Range nesnesi için bir Daraltma yöntemi var. Seçtiğinizde sol (veya sağ) ok tuşuna basmak gibi düşünün ... –