ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: yoyolee22

[求助] Excel表根据指定数据自动填入固定模板,自动选地方另存、预览和批量打印

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-7-18 20:29 | 显示全部楼层
yoyolee22 发表于 2019-7-18 19:56
公司系统落后到爆,提了三年需求,IT还说要排期,前段时间还在问有什么需求。本来系统可以直接输出的数据, ...

有需求不怕,只要肯花钱,网上很多威客网站,有一堆人可以帮你实现功能。我这种散兵,抢不过别人,才到EH这里逛逛。哈哈。

TA的精华主题

TA的得分主题

发表于 2019-7-18 20:32 | 显示全部楼层
zpy2 发表于 2019-7-18 19:34
每天都是加班,不会吧。。。工资高吗?

那要看加班算不算加班费,像我们这种加班没有加班费的,我就不用想了。呵呵

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-18 22:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tao60 发表于 2019-7-18 18:27
好久没写VBA了,很多代码都不记得了,很多代码都是通过录制宏生成的,然后再进行精简和修改。
功能基本实 ...

谢谢哥!完全可以实现我的要求,您太好了啊。我早上根据其他大神的贴很认真地学习,但是只能导入同名一条数据,折腾了半天,找我司IT帮忙看一下哪里需要修改,结果IT说不会,本以为帖子太多没人会理我,没想到您帮我处理了,真的太感谢您了,谢谢谢谢谢谢!!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-7-19 11:36 | 显示全部楼层
tao60 发表于 2019-7-18 18:27
好久没写VBA了,很多代码都不记得了,很多代码都是通过录制宏生成的,然后再进行精简和修改。
功能基本实 ...

老师好,请问为什么列表中最后一行的数据无法导入模板里面,也无法另存为一个文件?

TA的精华主题

TA的得分主题

发表于 2019-7-22 09:06 | 显示全部楼层
yoyolee22 发表于 2019-7-19 11:36
老师好,请问为什么列表中最后一行的数据无法导入模板里面,也无法另存为一个文件?

哦哦,刚试了下,确实有这个问题,增加一小段代码就可以解决了,我重新上传一份吧。论坛可能不常在线,可以E-Mail,tao60#qq.com (将#换成@)

修正.png
  1. 'tao60  2019-07-18

  2. Sub AllData()
  3. '开始批处理

  4.     Dim iRow As Integer
  5.     Dim iRowBegin As Integer
  6.     Dim iRowEnd As Integer
  7.     Dim iRow_all As Integer
  8.     Dim strUser As String
  9.     Dim stemp As String
  10.     Dim strPath As String
  11.    
  12.    
  13.     Dim shtList As Object
  14.     Dim shtOut As Object
  15.     Set shtList = Sheets("列表")
  16.     Set shtOut = Sheets("模板")
  17.    
  18.     '选择保存路径
  19.     With Application.FileDialog(msoFileDialogFolderPicker)
  20.         .Title = "选择要保存的路径……"
  21.         If .Show = False Then
  22.            Exit Sub
  23.         End If
  24.         
  25.         strPath = .SelectedItems(1)
  26.     End With
  27.    
  28.     '列表最大行号
  29.     iRow_all = shtList.Range("A65535").End(xlUp).Row
  30.    
  31.     iRowBegin = 2
  32.     strUser = Trim(shtList.Cells(2, 4))
  33.    
  34.     '从列表开始行号2开始处理
  35.     For iRow = 2 To iRow_all Step 1
  36.         stemp = Trim(shtList.Cells(iRow, 4))
  37.         
  38.         If strUser <> stemp Or iRow = iRow_all Then
  39.             iRowEnd = iRow - 1
  40.             '处理最后一行2019-07-22
  41.             If iRow = iRow_all Then
  42.                 iRowEnd = iRow_all
  43.             End If
  44.             '处理同一个收款人的数据,保存到一个文件,请先对列表数据进行排序,按照收款人进行排序
  45.             Call PathData(iRowBegin, iRowEnd, strUser, strPath)
  46.             
  47.             iRowBegin = iRow
  48.             strUser = shtList.Cells(iRow, 4)
  49.         End If
  50.     Next

  51. End Sub

  52. Function PathData(iBegin As Integer, iEnd As Integer, sName As String, sPath As String)
  53. '子程序 根据列表起止行号将列表数据写入到模板中,并另外文件和打印
  54. 'iBegin 开始行号, iEnd 结束行号, sName 文件名, sPath 另存文件路径

  55.     If iBegin = 0 Or iEnd = 0 Or iBegin > iEnd Then
  56.       Exit Function
  57.     End If
  58.    
  59.     Dim shtList As Object
  60.     Dim shtOut As Object
  61.     Set shtList = Sheets("列表")
  62.     Set shtOut = Sheets("模板")
  63.    
  64.     shtOut.Rows("4:65535").Delete Shift:=xlUp '删除所有数据行
  65.    
  66.     Dim iRowList As Integer
  67.     Dim iRowOut As Integer
  68.     Dim iCount As Integer
  69.    
  70.     iCount = 1
  71.     iRowOut = 4 '模板用于填写数据的位置行号
  72.     For iRowList = iBegin To iEnd Step 1
  73.         shtOut.Range("A" & iRowOut).Value = iCount
  74.         shtOut.Range("B" & iRowOut).Value = "'" & shtList.Range("B" & iRowList).Value
  75.         shtOut.Range("C" & iRowOut).Value = "'" & shtList.Range("C" & iRowList).Value
  76.         shtOut.Range("D" & iRowOut).Value = shtList.Range("H" & iRowList).Value
  77.         shtOut.Range("E" & iRowOut).Value = shtList.Range("I" & iRowList).Value
  78.         shtOut.Range("F" & iRowOut).Value = shtList.Range("J" & iRowList).Value
  79.         shtOut.Range("G" & iRowOut).FormulaR1C1 = "=RC[-3]-RC[-2]"
  80.         shtOut.Range("H" & iRowOut).Value = "'" & shtList.Range("D" & iRowList).Value
  81.         shtOut.Range("I" & iRowOut).Value = "'" & shtList.Range("E" & iRowList).Value
  82.         shtOut.Range("J" & iRowOut).Value = "'" & shtList.Range("F" & iRowList).Value
  83.         iCount = iCount + 1
  84.         iRowOut = iRowOut + 1
  85.     Next
  86.    
  87.     '汇总行
  88.     shtOut.Range("A" & iRowOut).Value = "合计"
  89.     shtOut.Range("A" & iRowOut & ":J" & iRowOut).Font.Bold = True
  90.     shtOut.Range("D" & iRowOut).FormulaR1C1 = "=SUM(R[-" & iCount - 1 & "]C:R[-1]C)"
  91.     shtOut.Range("E" & iRowOut).FormulaR1C1 = "=SUM(R[-" & iCount - 1 & "]C:R[-1]C)"
  92.     shtOut.Range("F" & iRowOut).FormulaR1C1 = "=SUM(R[-" & iCount - 1 & "]C:R[-1]C)"
  93.     shtOut.Range("G" & iRowOut).FormulaR1C1 = "=SUM(R[-" & iCount - 1 & "]C:R[-1]C)"

  94.     '边框线
  95.     shtOut.Range("A4:J" & iRowOut).Borders(xlEdgeLeft).LineStyle = xlContinuous
  96.     shtOut.Range("A4:J" & iRowOut).Borders(xlEdgeTop).LineStyle = xlContinuous
  97.     shtOut.Range("A4:J" & iRowOut).Borders(xlEdgeBottom).LineStyle = xlContinuous
  98.     shtOut.Range("A4:J" & iRowOut).Borders(xlEdgeRight).LineStyle = xlContinuous
  99.     shtOut.Range("A4:J" & iRowOut).Borders(xlInsideVertical).LineStyle = xlContinuous
  100.     shtOut.Range("A4:J" & iRowOut).Borders(xlInsideHorizontal).LineStyle = xlContinuous
  101.    
  102.     '字体
  103.     shtOut.Range("A4:J" & iRowOut).Font.Name = "宋体"
  104.     shtOut.Range("A4:J" & iRowOut).Font.Size = 10
  105.     shtOut.Range("A4:A" & iRowOut).HorizontalAlignment = xlCenter
  106.    
  107.     '底部签名栏
  108.     shtOut.Range("A" & iRowOut + 3).Value = "分公司负责人:                财务负责人:               业管部负责人:              渠道部负责人:                财务复核:"
  109.     shtOut.Range("A" & iRowOut + 6).Value = "代理人:                  制表:"
  110.     shtOut.Range("A" & iRowOut + 9).Value = "总公司分管会计:"
  111.    
  112.     '另存文件
  113.     Dim sFileName As String
  114.     Dim wbOut As Object
  115.    
  116.     sFileName = sPath & "" & sName & ".xlsx"
  117.     shtOut.Copy
  118.     Set wbOut = ActiveWorkbook
  119.     wbOut.ActiveSheet.Name = sName
  120.     wbOut.SaveAs Filename:=sFileName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False, ConflictResolution:=xlLocalSessionChanges
  121.    
  122.     '直接打印 无预览
  123.     wbOut.ActiveSheet.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
  124.    
  125.     '关闭
  126.     wbOut.Close False
  127. End Function

  128. Function test()
  129.     'DEMO测试
  130.     Call PathData(2, 5, "四四", "D:\2345Downloads")
  131.    
  132. End Function
复制代码




个人代支表另存Test.zip

27.73 KB, 下载次数: 249

TA的精华主题

TA的得分主题

发表于 2023-3-20 23:03 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tao60 发表于 2019-7-18 18:27
好久没写VBA了,很多代码都不记得了,很多代码都是通过录制宏生成的,然后再进行精简和修改。
功能基本实 ...

感觉很全面

TA的精华主题

TA的得分主题

发表于 2023-11-19 11:02 | 显示全部楼层
本帖最后由 hanson403 于 2023-11-19 12:28 编辑
tao60 发表于 2019-7-18 18:27
好久没写VBA了,很多代码都不记得了,很多代码都是通过录制宏生成的,然后再进行精简和修改。
功能基本实 ...

老师,如果最后一行数据收款人只有一行数据的话,他会跟上一个收款一起另存为新表。比如:最后一行数据收款人是丙丙,且仅有一行数据,生成时就会跟乙乙在一个表了,这怎么解决呢?第一行数据如果也是仅有一组数据的话,也会把第二组数据代入。就是首尾收款人都不能仅有一组数据

TA的精华主题

TA的得分主题

发表于 2023-11-20 20:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
哪位大佬能帮忙解决下
头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2023-11-20 23:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

发表于 2023-11-21 14:46 | 显示全部楼层

老师,最后一行还是没有解决,如果最后一行对应的收款人只有一条数据,就会与上一个收款人合并新建工作簿了。 微信截图_20231121141426.png C:\Users\DELL\Desktop\20231120-表格按模板拆分(个人代支表另存)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 17:51 , Processed in 0.049638 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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