2016-04-12 70 views
0

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üyorum

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 

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.

+1

Sadece Endeksi girişi ... –

+0

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

+1

Range nesnesi için bir Daraltma yöntemi var. Seçtiğinizde sol (veya sağ) ok tuşuna basmak gibi düşünün ... –

cevap

1

Genellikle, bir Dizindeki sayfa numaraları beklediğiniz şeyle eşleşmediğinde, bunun nedeni, belgenin yazdırılan sonuçta olmayacak içerik görüntülemesidir. Bu, ekrandaki "sayfa" içeriğini "aşağıya iten" sayfadaki sayfalandırmayı etkiler. Çoğu zaman, neden alan sonuçları görüntülenene kadar Alt + F9 tuşlarına basılarak bastırılabilen alan kodlarıdır.

Bu yaklaşım, XE (dizin işaretçileri) ve diğer bazı alan türleri ile birlikte gizli metin için geçerli değildir. "Gizli" metnin gösterilmesine izin verildiğinde görüntülenirler. Şerit'in Giriş sekmesindeki "Geriye Doğru P" düğmesini tıklatarak Dosya/Seçenekler/Ekran/"Bu biçimlendirme işaretlerini her zaman ekranda göster" ayarlarına bağlı olarak bunları kapatabilir veya açmayabilir. Aksi takdirde, ekranı değiştirmek için seçeneklere girmeniz veya bunu yapmak için bir makro oluşturmanız ve gerektiği şekilde çalıştırmanız gerekir.

Diğer olası neden, programın oluşturulmuş XE alanının, metnin başladığı sayfada bulunmak yerine, başka bir sayfaya bölünen uzun bir metin aralığının sonunda eklenmesidir. alanını sağlamak için başlangıç ​​yerine bir Range sonudur yılında başlangıç ​​noktasına Aralığı daraltmak:

rngEdited.Collapse wdCollapseStart 
+0

Harika bir açıklama, teşekkürler! – BruceWayne