首页 > 解决方案 > 在正文前提取标题 (MSWord VBA)

问题描述

我正在研究一个可以在 Word 文件中提取错误拼写的宏,我能够搜索一个可以做到这一点的宏,但是我想添加一个函数,它也可以提取正文之前的标题。

With oRow                             
    .Cells(1).Range.Text = oDoc.SpellingErrors(J).Information(wdActiveEndPageNumber)
    .Cells(2).Range.Text = oDoc.SpellingErrors(J).Information(wdFirstCharacterLineNumber)
    .Cells(3).Range.Text = oDoc.SpellingErrors(J)
    .Cells(4).Range.Text = 'SHOULD CAPTURE THE HEADING                      
 End With

*** 幻灯片 **** 2 文字

形状:标题 1 >> 文本:敏捷的棕色狐狸跳过懒惰的狗。敏捷的棕色狐狸跳过了懒狗。敏捷的棕色狐狸跳过了懒狗。敏捷的棕色狐狸跳过了懒狗。敏捷的棕色狐狸跳过了懒狗。

敏捷的棕色狐狸跳过了懒狗。敏捷的棕色狐狸跳过了懒狗。敏捷的棕狐跳过了懒惰的狗。敏捷的棕色狐狸跳过了懒狗。敏捷的棕色狐狸跳过了懒狗。

在上面的示例中,我现有的宏已经在提取“棕色”,因为它拼写错误。我需要添加一行来捕获“*** Slide **** 2 Text”,因为它是该段落的标题。

标签: vbams-word

解决方案


Word 具有一些内置书签,可以更轻松地处理文档的某些部分。由于它们来自旧的 Word Basic 时代,因此它们与当前选择一起使用。

因此,下面的代码首先选择拼写错误,然后选择拼写错误所在的整个标题级别。从那里,标题级别的第一段(使用标题样式格式化的文本)被拾取并分配给问题代码中的目标单元格。

Dim rng as Word.Range
With oRow                             
    .Cells(1).Range.Text = oDoc.SpellingErrors(J).Information(wdActiveEndPageNumber)
    .Cells(2).Range.Text = oDoc.SpellingErrors(J).Information(wdFirstCharacterLineNumber)
    .Cells(3).Range.Text = oDoc.SpellingErrors(J)
    oDoc.SpellingErrors(J).Select 
    Set rng = oDoc.Bookmarks("\HeadingLevel").Range
    rng.Collapse wdCollapseStart
    rng.MoveEnd wdParagraph, 1
    rng.MoveEnd wdCharacter, -1
   .Cells(4).Range.Text = rng.Text
 End With

推荐阅读