分享

EXCEL自动分页小计的VBA宏代码

 落漠孤帆 2011-04-19
EXCEL自动分页小计的VBA宏代码
 
许多朋友都有这样的难题。就是一个EXCEL表,有N多页,内容都是连续的,但却需要在每一页上加一个小计。
一般情况下,需要手工在每一页的下方加一行小计,但这样既浪费时间,又不方便以后的工作。
从网上搜索到这段代码,可以轻松的实现分页小计。在此,也谢谢写这段代码的兄弟/姐妹,虽然不知是哪位大侠。
 
使用方面:打开EXCEL,打开VBA编辑器,把这段代码复制进去。然后在EXCEL上添加一个按钮,指定宏即可。
 
代码:
Dim rCurrentCell As Range   ' 每一页之分页小计所在单元格
Dim r1stSubCell As Range    ' 小计区域第一个单元格
Sub 删除原有的分页小计行()
    Set r1stSubCell = Range("A5")           ' 本例名单从 A5 单元格开始
    For Each rCurrentCell In Range(r1stSubCell, r1stSubCell.End(xlDown))
        If rCurrentCell = "小计" Then rCurrentCell.EntireRow.Delete
    Next
End Sub
Sub 新建分页小计()
    Dim iSubCol As Integer, rSubArea As Range
    Dim hb As HPageBreak
    ActiveWindow.View = xlPageBreakPreview  ' 进入 分页浏览 模式, 以便 EXCEL 正确计页
    Set r1stSubCell = Range("A5")           ' 本例名单从 A5 单元格开始
    iSubCol = 20                            ' 本例小计项共有 20 列
    ' 避免可能的错误:手工分页符正好与自动分页符重合
    ' 建议运行前先删除手工分页符
    ' 本过程可选
    'For Each hb In ActiveSheet.HPageBreaks
    '    On Error Resume Next
    '    If hb.Type = xlPageBreakManual Then hb.Delete
    'Next
    ' 最后一行插入手工分页符
    ActiveSheet.HPageBreaks.Add Before:=r1stSubCell.End(xlDown).Offset(1, 0)
    ' 测试每一个分页符,
    ' 如果是自动分页符, 则在其上一行插入一小计行, 而本行纳入下一页
    ' 否则, 在本行插入一小计行
    For Each hb In ActiveSheet.HPageBreaks
        Set rCurrentCell = hb.Location
        rCurrentCell.Select                 ' 看看先
        If hb.Type = xlPageBreakAutomatic Then Set rCurrentCell = rCurrentCell.Offset(-1, 0)
        rCurrentCell.EntireRow.Insert
        Set rCurrentCell = rCurrentCell.Offset(-1, 0)
        ' 添加分页小计内容
        With rCurrentCell
            .Value = "小计"
            .Font.Bold = True
            Set rSubArea = .Offset(0, 1).Resize(1, iSubCol) ' 需要填充分页小计公式的区域
           
            ' 使用 SUBTOTAL 公式的好处是方便扩展, 且不会对已计算区域重复计算(如果可能发生这种情况的话)
            rSubArea.Formula = "=SUBTOTAL(9," & r1stSubCell.Offset(0, 1).Address(1, 0) & ":" & .Offset(-1, 1).Address(1, 0) & ")"
            Set r1stSubCell = .Offset(1, 0)
        End With
    Next
    ActiveWindow.View = xlNormalView
End Sub
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多