在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
发表评论