マクロを使用してインデックスを作成していますが、少し後にページ番号がうごめきになります。最初は正しいものですが、ドキュメントの深さが深くなるにつれてオフセットが発生します。インデックスのページ番号が正しくありません
私は使用しているコードが範囲(.Index.MarkEntry Range:=theRange ...
)を使用しており、範囲のエンドのページがページ番号の出所であるため、私はそれが愚かです。
インデックスで使用するページ番号が範囲内の最初の文字を持つページであることを確認するにはどうすればよいですか(それは意味がありますか?ここで
は私の(関連性のために切り捨て)コードです:
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
を「引き締める」することであるので、同じページに終わりますか?しかし、定義がページ区切りにまたがる場合は、そのページ番号が表示されているページ番号(最初のページ番号)の小さい方を使用したいと考えています。
アイデア/ヒント/考えをありがとう。
だけインデックスエントリを作成する前に、その出発点に範囲を折りたたむ... –
@ CindyMeister - それは 'RngEdited.Start = oRng.paragraphs(1).Range.End'を行うことを意味しますか?私はまだ単語が範囲を使用する方法の周りに私の頭をラッピングして、あなたの助けを感謝しています! – BruceWayne
Rangeオブジェクトには、Collapseメソッドがあります。あなたがセレクションを持っているときに左(または右)矢印キーを押すのと同じように考えてください。 –