如何在excel中用vba插入删除水平垂直分页符?

在excel中如果要调整打印的页面,会需要用到分页符。

分页符有水平和垂直分页符两种。

水平分页符会把打印区域分隔成上下部分,垂直分页符会把打印区域分隔成左右部分。

通过“视图”选项卡下的“分页预览”可以清楚的看到当前打印区域所具有的分页符。

当没有手动添加任何分页符时,系统会默认添加自动的分页符。

在vba中可以通过Range.PageBreak属性设置分页符,也可以使用HPageBreaks或者VPageBreaks集合添加分页符。

还可以通过工作表对象的ResetAllPageBreaks方法重置所有分页符。

当用工作表对象的ResetAllPageBreaks方法重置所有分页符时,excel会自动根据工作表的内容添加多个自动的分页符,自动分页符显示成蓝色的虚线,当手动插入分页符后,分页符会显示成蓝色的实线。

其中手动分页符,可以使用VPageBreak对象的Delete方法删除,自动分页符无法使用Delete方法删除,需要用DragOff方法删除。

当用DragOff方法删除自动分页符时,模拟的是用手动拖动自动分页符到打印区域外的方法。

它的语法如下:

VPageBreak.DragOff(Direction,RegionIndex)

其中Direction参数为要拖动的方向,RegionIndex为打印区域的编号,如果打印区域是连续的单元格,则RegionIndex为1,如果打印区域是非连续的单元格区域,则RegionIndex需要根据情况填写。

当需要遍历所有分页符时,建议用for..next循环语句,而不是用for each 循环语句。

如下代码是一些操作分页符的通用代码:

Sub exceloffice()
    '作者QQ1722187970,微信xycgenius
    Dim oWK As Worksheet
    Set oWK = Sheet1
    Dim oVPB As VPageBreak
    With oWK
        '重设所有分页符
        .ResetAllPageBreaks
        For i = 2 To 100 Step 5
            '每隔5行添加一个水平分页符
            .HPageBreaks.Add .Range("a" & i)
        Next i
          For i = 2 To 100 Step 5
            '每隔5列添加一个水平分页符
            .VPageBreaks.Add .Cells(1, i)
        Next i
  Excel.ThisWorkbook.Application.Windows(1).View = xlPageBreakPreview
         For Each oVPB In .VPageBreaks
                '将所有垂直分页符移除
                With oVPB
                    .DragOff xlToRight, 1
                End With
            Next
    End With
End Sub

这里需要特别提醒的一点是,当我们用vba代码删除自动分页符或者手动分页符时,分页符的集合元素的数量是会自动变化的。如果用for each或者for …next 循环语句时要注意循环变量超出集合元素数量的情况。

以下是一个示例代码可以解决上述的问题:

Sub exceloffice()
    '作者QQ1722187970,微信xycgenius
    Sheet5.Activate
    Excel.Application.ActiveWindow.View = xlPageBreakPreview
    Sheet5.ResetAllPageBreaks
    iRow = Sheet5.Range("a65536").End(xlUp).Row + 1
    Dim oHPB As HPageBreak
    Dim oVPB As VPageBreak
    For i = 13 To iRow Step 12
        If i <> iRow Then
            Sheet5.HPageBreaks.Add Sheet5.Range("a" & i)
        Else
         Sheet5.HPageBreaks.Add Sheet5.Range("a" & i + 1)
        End If
    Next
    '插入垂直分隔符
    Sheet5.VPageBreaks.Add Sheet5.Range("o1")
    With Sheet5
        For i = .HPageBreaks.Count To 1 Step -1
            If i > .HPageBreaks.Count Then Exit For
            Set oHPB = .HPageBreaks(i)
            Debug.Print oHPB.Location.Address
            If oHPB.Type = xlPageBreakAutomatic Then
                '删除自动水平分隔符
                oHPB.DragOff Direction:=xlDown, RegionIndex:=1
            End If
        Next i
        For i = .VPageBreaks.Count To 1 Step -1
            If i > .VPageBreaks.Count Then Exit For
            Set oVPB = .VPageBreaks(i)
            Debug.Print oVPB.Location.Address
            If oVPB.Type = xlPageBreakAutomatic Then
                 '删除垂直水平分隔符
                oVPB.DragOff xlToRight, 1
            End If
        Next i
    End With
    MsgBox "OK"
    Excel.Application.ActiveWindow.View = xlNormalView
End Sub
       

发表评论