ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 Office知识技巧免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 129|回复: 6

[求助] VBA可以把工资表按部门名称分成打印区块并加表头小计合计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-27 21:25 | 显示全部楼层 |阅读模式
VBA可以把工资表按部门名称分成打印区块并加表头、小计、合计,求老师们帮看看,表二是最终想要的效果!

按部门分成打印区块.rar

44.31 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-28 09:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-2-28 09:22 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim rng As Range
  4.   Dim ws As Worksheet
  5.   Dim arr, brr, zrr(), hg(1 To 4) As Double
  6.   Application.ScreenUpdating = False
  7.   Application.DisplayAlerts = False
  8.   Set ws = Worksheets("工资表")
  9.   With ws
  10.     Set rng = .Range("a1:w3")
  11.     For i = 1 To 4
  12.       hg(i) = .Rows(i).RowHeight
  13.     Next
  14.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  15.     arr = .Range("c1:c" & r)
  16.     bm = ""
  17.     For i = 4 To UBound(arr)
  18.       If arr(i, 1) <> bm Then
  19.         m = m + 1
  20.         ReDim Preserve zrr(1 To 2, 1 To m)
  21.         zrr(1, m) = i
  22.         zrr(2, m) = i
  23.         bm = arr(i, 1)
  24.       Else
  25.         zrr(2, m) = i
  26.       End If
  27.     Next
  28.   End With
  29.   With Worksheets("结果")
  30.     .Cells.Clear
  31.     m = 1
  32.     For k = 1 To UBound(zrr, 2)
  33.       For i = zrr(1, k) To zrr(2, k) Step 33
  34.         rng.Copy .Cells(m, 1)
  35.         With .Cells(m + 1, 1).Resize(1, 2)
  36.           .Value = Array("部门", arr(i, 1))
  37.           With .Font
  38.             .Name = "宋体"
  39.             .Size = 12
  40.           End With
  41.         End With
  42.         ws.Cells(i, 1).Resize(IIf(i + 32 <= zrr(2, k), 33, (zrr(2, k) - zrr(1, k) + 1) Mod 33), 23).Copy .Cells(m + 3, 1)
  43.         .Cells(m + 36, 2) = "小计"
  44.         With .Cells(m + 36, 4).Resize(1, 20)
  45.           .FormulaR1C1 = "=SUM(R" & m + 3 & "C:R[-1]C)"
  46.           .ShrinkToFit = True
  47.         End With
  48.         With .Cells(m + 2, 1).Resize(35, 23)
  49.           .Borders.LineStyle = xlContinuous
  50.           With .Font
  51.             .Size = 9
  52.           End With
  53.         End With
  54.         .Cells(m + 37, 2) = "制表:"
  55.         .Cells(m + 37, 3) = "李会圆"
  56.         .Cells(m + 37, 8) = "审核:"
  57.         .Cells(m + 37, 9) = "马东海"
  58.         For j = 1 To 3
  59.           .Rows(m + j - 1).RowHeight = hg(j)
  60.         Next
  61.         .Rows(m + 3).Resize(33).RowHeight = hg(4)
  62.         m = m + 38
  63.       Next
  64.     Next
  65.     With .UsedRange
  66.       .HorizontalAlignment = xlCenter
  67.       .VerticalAlignment = xlCenter
  68.     End With
  69.   End With
  70. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2020-2-28 09:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-2-28 09:34 | 显示全部楼层
这个是不留空行的。
  1. Sub test2()
  2.   Dim r%, i%
  3.   Dim rng As Range
  4.   Dim ws As Worksheet
  5.   Dim arr, brr, zrr(), hg(1 To 4) As Double
  6.   Application.ScreenUpdating = False
  7.   Application.DisplayAlerts = False
  8.   Set ws = Worksheets("工资表")
  9.   With ws
  10.     Set rng = .Range("a1:w3")
  11.     For i = 1 To 4
  12.       hg(i) = .Rows(i).RowHeight
  13.     Next
  14.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  15.     arr = .Range("c1:c" & r)
  16.     bm = ""
  17.     For i = 4 To UBound(arr)
  18.       If arr(i, 1) <> bm Then
  19.         m = m + 1
  20.         ReDim Preserve zrr(1 To 2, 1 To m)
  21.         zrr(1, m) = i
  22.         zrr(2, m) = i
  23.         bm = arr(i, 1)
  24.       Else
  25.         zrr(2, m) = i
  26.       End If
  27.     Next
  28.   End With
  29.   With Worksheets("结果")
  30.     .Cells.Clear
  31.     .Cells.PageBreak = xlPageBreakNone
  32.     m = 1
  33.     For k = 1 To UBound(zrr, 2)
  34.       For i = zrr(1, k) To zrr(2, k) Step 33
  35.         hs = IIf(i + 32 <= zrr(2, k), 33, (zrr(2, k) - zrr(1, k) + 1) Mod 33)
  36.         rng.Copy .Cells(m, 1)
  37.         With .Cells(m + 1, 1).Resize(1, 2)
  38.           .Value = Array("部门", arr(i, 1))
  39.           With .Font
  40.             .Name = "宋体"
  41.             .Size = 12
  42.           End With
  43.         End With
  44.         ws.Cells(i, 1).Resize(hs, 23).Copy .Cells(m + 3, 1)
  45.         .Cells(m + 3 + hs, 2) = "小计"
  46.         With .Cells(m + 3 + hs, 4).Resize(1, 20)
  47.           .FormulaR1C1 = "=SUM(R" & m + 3 & "C:R[-1]C)"
  48.           .ShrinkToFit = True
  49.         End With
  50.         With .Cells(m + 2, 1).Resize(hs + 2, 23)
  51.           .Borders.LineStyle = xlContinuous
  52.           With .Font
  53.             .Size = 9
  54.           End With
  55.         End With
  56.         .Cells(m + 3 + hs + 1, 2) = "制表:"
  57.         .Cells(m + 3 + hs + 1, 3) = "李会圆"
  58.         .Cells(m + 3 + hs + 1, 8) = "审核:"
  59.         .Cells(m + 3 + hs + 1, 9) = "马东海"
  60.         For j = 1 To 3
  61.           .Rows(m + j - 1).RowHeight = hg(j)
  62.         Next
  63.         .Rows(m + 3).Resize(hs + 2).RowHeight = hg(4)
  64.         m = m + 3 + hs + 1 + 1
  65.         .HPageBreaks.Add Before:=.Rows(m)
  66.       Next
  67.     Next
  68.     With .UsedRange
  69.       .HorizontalAlignment = xlCenter
  70.       .VerticalAlignment = xlCenter
  71.     End With
  72.   End With
  73. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2020-2-28 09:37 | 显示全部楼层
两段代码生成两种格式,一种保留空行,一种不保留空行,楼主选着用吧。

按部门分成打印区块.rar

75.49 KB, 下载次数: 10

评分

参与人数 2鲜花 +4 收起 理由
ynymzzr + 2 太强大了
8033 + 2 太强大了

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-28 10:43 | 显示全部楼层
再次感谢chxw68老师,帮我解决了很多问题,非常感谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2020-3-30 12:05 , Processed in 0.066480 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表