Word宏删除具有特定文本的页面

时间:2015-10-10 20:38:24

标签: string vba ms-word find selection

我正在尝试删除包含特定文本的任何页面,例如下面的句子(strSearch =)。但是当我尝试运行我的宏时,我得到一个5904错误...有任何线索吗?

  Sub DeletePages()
    Dim strSearch As String
    Dim rgeStart As Range
    Set rgeStart = Selection.Range

    strSearch = "Report the content of the ""StatusBar"" status bar message to the results."

    With ActiveDocument.Range.Find
      .Text = strSearch
      Do While .Execute
        With .Parent
          .Select With Selection
          .Bookmarks("\Page").Range.Delete
        End With
      End With
    Loop
  End With

  rgeStart.Select
  Application.Browser.Target = wdBrowsePage
End Sub

1 个答案:

答案 0 :(得分:0)

我在.Select With Selection上遇到语法错误,并且没有这行的智能感知......似乎对象无法访问属性和方法,因为语句是相互嵌入的。

以下对我有用...我必须以不同方式删除最后一页

 Sub DeletePages()
'source1 http://stackoverflow.com/questions/13465709/repeating-microsoft-word-vba-until-no-search-results-found
'source2 https://msdn.microsoft.com/en-us/library/bb208876(v=office.12).aspx

    Dim strSearch As String

    strSearch = "GoodBye"

    With Selection.Find
        .Forward = True
        .Wrap = wdFindStop
        .Text = strSearch
        .Execute
    End With


    Do While Selection.Find.Found = True And iCount < 1000
        iCount = iCount + 1
        Selection.HomeKey Unit:=wdStory
        Selection.Find.Execute
        If Selection.Find.Found Then
            'Get Current page
            CurPage = Selection.Information(wdActiveEndAdjustedPageNumber)

            'Check if current page is the last page
            If CurPage = FindLastPage Then
                ActiveDocument.Range(Selection.Start, ActiveDocument.Range.End).Delete
            Else
                ActiveDocument.Bookmarks("\Page").Range.Delete
            End If
        End If
    Loop

End Sub
Function FindLastPage()
    'Source https://support.microsoft.com/en-us/kb/293861
    'Iterate each section in the document to retrieve the end page of the
    'document and compute the page count in that section. The results are
    'displayed in the Immediate window.
    Dim oSec As Object
    Dim nStartPg As Integer, nEndPg As Integer, nSecPages As Integer
    Dim NumSections As Integer
    NumSections = ActiveDocument.Sections.Count
    nStartPg = 1
    For Each oSec In ActiveDocument.Sections
       nEndPg = oSec.Range.Information(3) - 1  'wdActiveEndPageNumber=3
       'Account for the last page.
       If oSec.Index = NumSections Then nEndPg = nEndPg + 1
       nSecPages = nEndPg - nStartPg + 1
       FindLastPage = nSecPages
    Next

End Function