ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何通过vba利用工资表清单生成指定格式的打印表格清单?

如何通过vba利用工资表清单生成指定格式的打印表格清单?

作者:绿色风 分类: 时间:2022-08-17 浏览:82
楼主
kevinchengcw
Q: 如何通过vba利用工资表清单生成指定格式的打印表格清单?
A: 代码及注解如下:
  1. Sub test()
  2. Dim Ws As Worksheet, Arr, Arrt, Arrt2, Result, N&, I&, T%, A%, M, Y%
  3. M = Application.InputBox("请输入要生成打印表的月份:", "输入", , , , , , 1)  '利用inputbox方法输入月份数据(可以控制输入数据类型为数值)
  4. If M > 0 And M <= 12 Then  '如果是有效月份数值,则
  5.     Y = IIf(M = 12, Year(Date) - 1, Year(Date))  '计算对应的年份日期(因工资表一般都是次月打印,故如果为12月工资表则年份应减1)
  6.     On Error GoTo Skip  '设置出错跳转
  7.     Application.DisplayAlerts = False  '关闭屏幕刷新及警告提示
  8.     Application.ScreenUpdating = False
  9.     For Each Ws In Worksheets  '循环各个工作表,如果已存在对应月份的打印表则删除
  10.         If Ws.Name = M & "工资表打印版" Then
  11.             Ws.Delete
  12.             Exit For
  13.         End If
  14.     Next Ws
  15.     With Worksheets(M & "月份工资表")
  16.         If .Cells(.Rows.Count, 1).End(3).Row > 1 Then  '如果对应月份工资表有两行以上数据(即扣除标题行后仍有数据),则
  17.             Arr = .Range("a1", .Cells(.Cells(.Rows.Count, 1).End(3).Row, .Cells(1, .Columns.Count).End(1).Column)).Value  '将有数据部分提取到数组中
  18.             Arrt = Split("单位,员工号,姓名,职务工资,级别工资,岗位工资,技术等级工资,薪级工资,离退休工资,教育提高部分,教龄,,,,合并补贴,住房补贴,股级,公积金,津贴补贴,供热补贴,劳模补贴,代扣(补)工资,,,,行业补贴,护理费,应发工资,代扣公积金,扣个人所得税,代扣个人医保,实发工资,打印日期", ",")  '设定单个工资单的标题数据内容数组
  19.             Arrt2 = Array(2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 4, 4, 4, 5, 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 4, 11, 6, 4, 6, 5, 6, 6, 6, 7, 6, 8, 6, 9, 6, 10)  '设定各个标题对应内容相对于左上角单元格的偏移量对应表数组
  20.             ReDim Result(1 To (UBound(Arr) - 1) * 7, 1 To 11)  '重定义结果数组内容为对应数量的表格区域大小
  21.             For N = LBound(Arr) + 1 To UBound(Arr)  '循环工资表中除标题行的各行
  22.                 I = (N - 1) * 7 - 6  '设定当前行对应的打印表起始单元格行数
  23.                 Result(I, 1) = Y & "年" & M & "月份工资表"  '设定起始行文本
  24.                 For T = LBound(Arrt) To UBound(Arrt)  '循环将对应标题写入对应位置
  25.                     Result(I + Int(T / 11) * 2 + 1, (T Mod 11) + 1) = Arrt(T)
  26.                 Next T
  27.                 For T = LBound(Arr, 2) To UBound(Arr, 2)  '循环将对应数据定入对应位置
  28.                     If (T - 1) * 2 < UBound(Arrt2) Then Result(I + Arrt2((T - 1) * 2), Arrt2((T - 1) * 2 + 1)) = Arr(N, T)
  29.                 Next T
  30.                 Result(I + 6, 11) = Format(Date, "yyyy年m月d日")  '最后写入对应的打印日期
  31.             Next N
  32.             With Worksheets.Add(before:=Worksheets(1))  '添加新的工作表
  33.                 .Name = M & "工资表打印版"  '命名为对应月份的打印表
  34.                 With .Cells  '设定单元格水平与垂直方向文字居中对齐,字体大小为12号,行高为21.75
  35.                     .HorizontalAlignment = xlCenter
  36.                     .VerticalAlignment = xlCenter
  37.                     .Font.Size = 12
  38.                     .EntireRow.RowHeight = 21.75
  39.                 End With
  40.                 .[a1].Resize(UBound(Result), UBound(Result, 2)) = Result  '将结果数组中的内容写入表格
  41.                 For N = 1 To UBound(Arr) - 1  '循环将对应区域格式设置好(合并单元格及设置边框线)
  42.                     With .Cells((N - 1) * 7 + 1, 1)
  43.                         .Offset(2).Resize(5).Merge
  44.                         .Offset(2, 1).Resize(5).Merge
  45.                         .Offset(2, 2).Resize(5).Merge
  46.                         .Offset(1).Resize(6, 11).Borders.LineStyle = 1
  47.                         .Resize(, 11).Merge
  48.                     End With
  49.                 Next N
  50.                 .Columns.AutoFit  '设置列宽自适应
  51.             End With
  52.             MsgBox "打印表生成完成"  '显示提示信息
  53.         Else  '如果月工资表中无有效数据行则显示提示
  54.             MsgBox "该月份工资表中无有效数据行!"
  55.         End If
  56.     End With
  57.     Application.DisplayAlerts = True  '恢复屏幕更新及提示信息显示
  58.     Application.ScreenUpdating = True
  59. ElseIf M = False Then  '如果按下了月份输入框的取消按钮则显示此信息
  60.     MsgBox "取消操作"
  61. Else  '其他情况显示月份无效
  62.     MsgBox "无效的月份日期!"
  63. End If
  64. Exit Sub  '正常完成后由此退出程序
  65. Skip:  '出错时跳转至此,恢复禁止的项目并提示出错
  66.     Application.DisplayAlerts = True
  67.     Application.ScreenUpdating = True
  68.     MsgBox "出错退出"
  69. End Sub
详见附件及素材源帖。
工资表打印wayy.rar



该帖已经同步到
2楼
biaotiger1
通过VBA打印指定格式的工资表。
相当有实用价值。
谢谢K哥原创。
3楼
kangguowei
学习,谢谢分享!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap