2016-05-17 3 views
0

У меня есть макрос в Word, который ищет документ, а затем делает что-то, когда он найден.Какой тип поля мой выбор?

Я хотел бы проверить, если найденный текст в оглавлении, но это, кажется, не нравится, как у меня есть код:

Sub test() 
Dim myDoc As Word.Document 
Dim oRng As Word.Range, rng As Word.Range, rngXE As Word.Range 
Dim addDefinition$, editedDefinition$ ',findText$ 
Dim rngEdited 
Dim bFound As Boolean 
Dim findText() As Variant 
Dim y& 

Set myDoc = ActiveDocument 
bFound = True 

Call Clear_Index 

findText = Array("whatever", "whatever:", "Whatever:") 

For y = LBound(findText) To UBound(findText) 
'Loop through the document 
Set oRng = myDoc.Content 
Set rngXE = oRng.Duplicate 
With oRng.Find 
    .ClearFormatting 
    .ClearAllFuzzyOptions 
    .Text = findText(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 

     ' 
     ' THIS IS WHERE I NEED HELP :(
     If rngXE.Fields.Type = wdFieldTOC Then ' This doesn't work. 
      MsgBox (" In a TOC!") 
     End If 
    End If 
End Sub 

Он бросает

Compile Error: Method or data member not found

я видел петли

For each fld in myDoc.Fields 
    If fld.Type = wbFieldTOC Then 
     'Do something 
    end if 
next fld 

Какую работу - я просто с трудом понять, чтобы найти поле конкретного текста.

ответ

1

Метод InRange полезен для обнаружения того, находится ли один диапазон в другом диапазоне. Так как есть коллекция TableOfContents для объекта Document, достаточно просто получить этот диапазон и проверить, находится ли внутри него какой-либо другой ange (даже Selection.Range).

Следующий фрагмент предполагает, что документ имеет TOC и что вас интересует первый TOC. Если ваша ситуация в противном случае, вам нужно сделать некоторую проверку, чтобы убедиться, что ссылка соответствует правильному ТОС:

oRng.InRange(ActiveDocument.TablesOfContents(1).Range) 
+0

Это замечательно! Спасибо за это, я пошел с 'If rngXE.InRange (myDoc.TablesOfContents (1) .Range) = False Затем ...' – BruceWayne

Смежные вопросы