[VBA]大概能用100种方法做工资条(4/100)

论坛 期权论坛 期权     
藏在西塔里的梦   2019-7-8 06:07   2695   0

[/url]
             本文为用于划水的学习笔记        

    在之前的之前的之前,通过辅助列、分类汇总、邮件合并等方法制作“工资条”。
    再换一次思路,用VBA实现“工资条”的拆分处理,并单独生成一个工作簿。


                             代码&注释                        
Sub 批量拆分()Application.ScreenUpdating = False
'关闭屏幕自动更新,有利于优化程序的运行
Set sh = ThisWorkbook.Worksheets(1)
'对数据源工作表进行定义,“sh”是“sheet”的缩写,是定义变量的惯例,当然也可以用“a,b,c,d,e,f...”等未被定义过的字母或字母组合
Set Rng = sh.Rows("1:1")'定义原工作表的标题行n = sh.Cells(Rows.Count, 1).End(xlUp).Row'确定需要拆分数据末行的行数,并进行定义;一般选择A列数据进行计算即可;Rows.Count是第一列的最大行数,Cells(Rows.Count, 1).End(xlUp)从末列向上寻找最后一行非空的单元格Application.SheetsInNewWorkbook = 1'约定初始工作簿(workbook)仅包含一张表(sheet),由于仅需1张表,且新的工作簿默认是生成3张表(sheet),通过此约定,可优化程序
For i = 2 To n
    '从第2行数据开始循环,一直到非空的末行数据    Set wb = Workbooks.Add    '新建并定义工作簿    Rng.Copy wb.Worksheets(1).[a1]
    '粘贴表头
    sh.Rows(i & ":" & i).Copy wb.Worksheets(1).[a2]    '粘贴拆分的数据:随着循环,一行一行逐次粘贴    wb.SaveAs Filename:=ThisWorkbook.Path & "\" & wb.Worksheets(1).[a2] & wb.Worksheets(1).[b2]    '保存工作簿至当前文件夹,并以A列&B列的“工号+姓名”数据作为唯一值完成命名    wb.Close
    '关闭工作簿Next i'使用For Next语句,实现循环建表、粘贴数据
MsgBox "共拆分" & n-1 & "条数据"'考虑用户体验,在运行完成后,弹出拆分结果窗口,例如:“共拆分25条数据”
Set sh = NothingSet Rng = NothingSet rs = Nothing
'从内存释放变量,使程序运行得更快,这是一个好习惯
Application.ScreenUpdating = True'恢复屏幕自动更新,关掉的功能,程序结束前需要记得恢复
End Sub




以上代码可直接复制到VBA中使用,也可在网盘中获取完整文件
百度网盘:https://pan.baidu.com/s/1HkduTms9fXnYX_7RYaCqZg提取码:6rsj
[iframe]https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_883038476587892740[/iframe]

往期相关文章回顾:
[url=http://mp.weixin.qq.com/s?__biz=MzI1NjYyNzY4MQ==&mid=2247483676&idx=1&sn=009e98d55d29f700ffd93f87eaf13537&chksm=ea228792dd550e84f2730461419484ecb5c4ab8c6b0d61f46bf479445e5c40d52b3ddba18769&scene=21#wechat_redirect][学习笔记-VBA-001]如何制作美丽的工资条?

[h1][office]Word&Excel联动—邮件合并[/h1]-End-

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP