VBA 查找标题、删除并移至下一个标题

VBA to find heading, delete, and move onto next heading

我有以下代码来查找标题中包含“DELETE”一词的标题(从标题 1-4 不等),以删除标题及其下方的文本,以及嵌套的标题。但是,它会在删除找到的第一组标题后停止。我怎样才能让它处理文档中的所有标题?谢谢!

Sub deleteheading()
  Dim rngHeading1 As Range
  Set rngHeading1 = GetHeadingBlock("DELETE", wdStyleHeading1)
  If Not rngHeading1 Is Nothing Then rngHeading1.Delete
  
    Dim rngHeading2 As Range
  Set rngHeading2 = GetHeadingBlock("DELETE", wdStyleHeading2)
  If Not rngHeading2 Is Nothing Then rngHeading2.Delete
  
    Dim rngHeading3 As Range
  Set rngHeading3 = GetHeadingBlock("DELETE", wdStyleHeading3)
  If Not rngHeading3 Is Nothing Then rngHeading3.Delete
  
    Dim rngHeading4 As Range
  Set rngHeading4 = GetHeadingBlock("DELETE", wdStyleHeading4)
  If Not rngHeading4 Is Nothing Then rngHeading4.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 = "DELETE"
    .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

例如:

Sub DeleteHeadingSpanText()
Application.ScreenUpdating = False
Dim h As Long
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "DELETE"
    .Replacement.Text = ""
    .Format = True
    .Forward = True
    .MatchCase = True
    .MatchWholeWord = True
    .Wrap = wdFindContinue
  End With
  For h = 1 To 9
    .Style = "Heading " & h
    Do While .Find.Execute
      .Duplicate.GoTo(What:=wdGoToBookmark, Name:="\HeadingLevel").Text = vbNullString
    Loop
  Next
End With
Set RngHd = Nothing
Application.ScreenUpdating = True
End Sub

更改 'For h = 1 To 9' 中的 1 和 9 以定义要将代码范围限制到的任何标题级别。

此代码调用您自己的函数GetHeadingBlock

Sub DeleteHeading()

  Dim rngHeading    As Range
  Dim i             As WdBuiltinStyle
  
  For i = wdStyleHeading1 To wdStyleHeading4 Step -1
    Do
      Set rngHeading = GetHeadingBlock("DELETE", i)
      If rngHeading Is Nothing Then
          Exit Do
      Else
          rngHeading.Delete
      End If
    Loop
  Next i
End Sub