如何删除VBA office word中的顶部空行 < >如何删除 >在VBA Word 2016中每一页顶部的空白行>

如何删除VBA office word中的顶部空行 < >如何删除 >在VBA Word 2016中每一页顶部的空白行>,vba,ms-word,Vba,Ms Word,我试着做这样的事 Sub RemoveBlankParas() Dim para As Paragraph For Each para In ActiveDocument.Paragraphs If Len(para.Range.Text) = 1 Then 'only the paragraph mark, so.. para.Range.Delete End If Next para E

我试着做这样的事

Sub RemoveBlankParas()
    Dim para As Paragraph

    For Each para In ActiveDocument.Paragraphs
        If Len(para.Range.Text) = 1 Then
            'only the paragraph mark, so..
            para.Range.Delete
        End If
    Next para
End Sub
但该代码的问题在于,它不仅删除了页面顶部的所有空行,还删除了页面中心或底部的所有空行


如果你能在宏中实现删除空白页面(没有文字的页面),那就太棒了。谢谢。

更新2:我找到了删除文档中最后一个手动分页符的方法

更新1:我修改了以下代码以删除空白页。如果一个空白页由任何或多个空白行(而不是其他文本)组成,那么原始代码将删除所有这些行,因为它们从技术上讲是从页面顶部开始的。然后在第二遍中,它只会将分页符作为页面上唯一的“段落”。如果找到,它将被删除

我认为下面可以解决删除每页顶部空白的问题。请记住,当文本被删除时,Word将继续“重新绘制”页面。但更重要的是,段落可以是任何大小,即1行、2行或20行

Option Explicit

Sub RemoveBlankParas()
    Dim oDoc        As Word.Document
    Dim para        As Word.Paragraph
    Dim i           As Integer
    Dim oRng        As Range
    Dim lParas      As Long
    Dim lEnd        As Long
    Dim lDeleted    As Long

    Set oDoc = ActiveDocument
    lParas = oDoc.Paragraphs.Count          ' Total paragraph count
    'Debug.Print "Total paragraph Count: " & lParas

    ' Loop thru each page
    i = 0       ' Reset starting page - if I'm testing
    Do
        ' Select one page
        i = i + 1
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i
        Set oRng = Selection.Range
        oRng.End = Selection.Bookmarks("\Page").Range.End
        oRng.Select

        Debug.Print "Range Count: " & oRng.Paragraphs.Count        ' Paragraphs in this page range
        lEnd = lEnd + oRng.Paragraphs.Count                         ' Keep track of how many processed

        For Each para In oRng.Paragraphs
            'Debug.Print "Par Len:" & vbTab & Len(para.Range.Text) & " | " & Left(para.Range.Text, Len(para.Range.Text) - 1)
            If Len(para.Range.Text) = 1 Then
                para.Range.Delete
                lDeleted = lDeleted + 1
            Else        ' If not blank, then delete o more in this page!
                Exit For
            End If
        Next para

        ' Calc how many paragraphs processed
        If lDeleted + lEnd >= lParas Then       ' If more that we started with, let's call it a day!
            Exit Do
        End If
    Loop

    ' You can add code to loop thru each page and if only one paagraph, ...
    ''' Check if 'empty' page

    ' Get latest count...
    lParas = oDoc.Paragraphs.Count          ' Total paragraph count

    lDeleted = 0        ' reset stuff - in case
    lEnd = 0
    i = 0
    Do
        i = i + 1
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i
        Set oRng = Selection.Range
        oRng.End = Selection.Bookmarks("\Page").Range.End
        oRng.Select

        Debug.Print "Range Count: " & oRng.Paragraphs.Count        ' Paragraphs in this page range
        lEnd = lEnd + oRng.Paragraphs.Count
        If oRng.Paragraphs.Count = 1 Then
            If oRng.Paragraphs(1).Range.Text = Chr(12) & Chr(13) Then
                oRng.Paragraphs(1).Range.Delete
                lDeleted = lDeleted + 1
                i = i - 1
            'ElseIf Len(oRng.Paragraphs(1).Range.Text) = 1 Then
            '    oRng.Paragraphs(1).Range.Delete
            '    lDeleted = lDeleted + 1
            '    i = i - 1
            End If
        End If
        If lEnd >= lParas Then
            Exit Do
        End If
    Loop

    ' Finally!!!  Deal with the lingering final page-break!
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=999      ' Go to Last Page.
    Set oRng = Selection.Range                                              ' Select the end..
    oRng.MoveStart wdCharacter, -3                                          ' Backup 3 characters
    If Left(oRng.Text, 2) = Chr(13) & Chr(12) Then                          ' Should be 13+12
        oRng.Text = ""                                                      ' Remove that thingy!
    End If

    Set para = Nothing
    Set oDoc = Nothing
    Exit Sub
End Sub

你们有手动分页符吗?如果没有,当文本因删除而向上移动时会发生什么?非常感谢您刚刚救了我的命,非常感谢,尽管删除空白页将是一个不错的添加,但无论如何非常感谢您,我更新了代码以删除只包含分页符的空白(空)页。如果文档末尾有一个手动分页符,那么从技术上讲,后面会有一个空白页。在VBA中,您可以通过转到文档末尾,检查段落是否只有一个字符,然后备份到上一个段落并检查它是否为分页符来检查这一点。祝你好运谢谢你再次帮助我:),但唯一的错误是它在底部留下了一个空白页。。。它完美地删除了中心的空白页,它确实删除了空白行,但是它再一次在BooTM上留下了空白页,谢谢WayneOK,我想我是邓恩(呃,完了)。我添加了删除最后一个手动分页符的代码,这样在末尾就没有空白页了。。。。