在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


发表评论