我有一个要求,我必须在Word文档的目录后面提取两行文本。该文本被隐藏并添加,只是为了在VBA中使用。
我做了一些研究,发现我可以使用Range
对象从单词Document中提取文本,所以我尝试对其进行硬编码,并通过使用获得了我想要的值
MsgBox ActiveDocument.Paragraphs(43).Range.Text
现在,这段代码可以用于特定的文档,但对于新文档,我不知道目录将在哪里结束,也不知道我必须提取的确切行号。
如有任何帮助,我们将不胜感激。
这有点棘手,因为字段对象没有范围,所以必须查找字段的Result的范围。一旦你有了结果范围,你就可以得到它所在的段落范围,然后是下一段的范围,然后当你有了这个范围时,是该段的文本。听起来很复杂,但当你了解Word对象模型的工作原理时,在实践中就很简单了。
Sub Test()
Debug.Print GetTextAfterToc
End Sub
Public Function GetTextAfterToc() As String
Dim myfield As Word.Field
For Each myfield In ActiveDocument.StoryRanges(wdMainTextStory).Fields
If myfield.Type = wdFieldTOC Then
GetTextAfterToc = myfield.Result.Paragraphs(1).Range.Next(unit:=wdParagraph, Count:=1).Text
Exit Function
End If
Next
End Function
我找到了问题的答案。我发布它是为了帮助其他人解决类似的问题。感谢u/slang4201的回答。
这将选择紧接在TOC之后的两行。
Dim myField As Field
For Each myField In ActiveDocument.Fields
If myField.Type = wdFieldTOC Then
myField.Select
Selection.Collapse wdCollapseEnd
Selection.MoveDown unit:=wdLine, Count:=2, Extend:=True
MsgBox (Selection.Range)
Exit For
End If
Next myField
End Sub
但是,如果您要查找的线是隐藏的,除非您先取消隐藏,否则将无法选择和找到它们。
ActiveDocument.Range.Font.Hidden = False
希望这能有所帮助,祝你好运!