如何使用VBA提取Microsoft Word目录后的隐藏文本



我有一个要求,我必须在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

希望这能有所帮助,祝你好运!

最新更新