我选择了哪种字段类型?

时间:2016-05-17 18:53:48

标签: ms-word word-vba

我在Word中有一个宏来搜索文档,然后在找到时执行操作。

我想检查Found文本是否在目录中,但它似乎并不喜欢我的代码:

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

它抛出

  

编译错误:找不到方法或数据成员

我看过

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

哪项工作 - 我很难理解找到特定文字的字段。

1 个答案:

答案 0 :(得分:1)

InRange方法可用于发现一个范围是否位于另一个范围内。由于TableOfContents对象有一个Document集合,因此它非常简单,可以获得该范围,并测试其中是否有其他ange(偶数Selection.Range)。

以下代码段假定文档具有TOC并且您对第一个TOC感兴趣。如果您的情况不是这样,您需要进行一些检查以确保参考是正确的TOC:

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