Word VBA:如何使用标题从模板文档中删除文本部分

时间:2020-07-29 08:45:12

标签: vba ms-word

我有一个模板文档,其中包含生成的文档在任何时候都不需要的部分。我正在VBA上使用用户表单来创建需要从文档中删除的标题(节)列表。

Private Sub Delete_Click()
    Set rngHeader = ActiveDocument.Range.Find("Test")
    rngHeader.Select
    Selection.Delete
End Sub

我知道我需要在循环浏览标题列表时循环浏览文档,但是不确定其逻辑。

一般来说,我对VBA和VB完全陌生,所以不确定如何/可以解决这个问题。

谢谢您的任何建议! 真的很感激

1 个答案:

答案 0 :(得分:1)

假设您已使用标题样式设置了标题格式,则以下功能应该可以使您更接近某个地方。

标题样式具有指定的大纲级别,该大纲级别从1到9,最高为1。 Word具有内置的书签“ \ HeadingLevel”,可用于返回标题下方的所有文本。范围将在相同级别或更高级别的下一个标题处结束。因此,如果您正在寻找轮廓级别为2的标题,则该范围将以标题1或标题2结尾。范围为3-9或“正文”(最低级别)的任何文本都将包括在该范围中。

Sub Test()
  Dim rngHeading As Range
  Set rngHeading = GetHeadingBlock("Heading text you want to find", wdStyleHeading1)
  If Not rngHeading Is Nothing Then rngHeading.Delete
End Sub

Function GetHeadingBlock(headingText As String, headingStyle As WdBuiltinStyle) As Range
  Dim rngFind As Range
  Set rngFind = ActiveDocument.Content
  With rngFind.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = headingText
    .style = headingStyle
    .Replacement.Text = ""
    .Forward = True
    .Format = True
    .Wrap = wdFindStop
    If .Execute Then Set GetHeadingBlock = _
      rngFind.GoTo(What:=wdGoToBookmark, name:="\HeadingLevel")
  End With
End Function
相关问题