ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3488|回复: 13

[求助] 求大神做一个EXCEL表根据模板生成多个文件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-11-28 12:41 | 显示全部楼层 |阅读模式
为了方便,我发了一个附件,订单列表有自己填写了三个合同的数据,然后根据合同模板自动生成三个对应的Excel格式的合同文件。合同模板里标黄的地方就是和订单列表对应的填写的位置。
目前我只是在一个合同里写了两行内容,我有的时候合同里会录入上百行内容,所以希望大神考虑一下这种情况。

合同生成.zip

47.26 KB, 下载次数: 38

TA的精华主题

TA的得分主题

发表于 2018-11-28 14:14 | 显示全部楼层
EXCEL必备工具箱有这个功能,免费的。百度搜索EXCEL必备工具箱。

TA的精华主题

TA的得分主题

发表于 2018-11-28 14:53 | 显示全部楼层
同感,有现成的,确实可以去用下。!!!!!!!!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-28 15:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-11-28 15:41 | 显示全部楼层
把sheet2合同模板中黄色区域内容清除
  1. Sub test()
  2. Application.DisplayAlerts = False
  3. Application.ScreenUpdating = False

  4. Sheets(1).Activate
  5. n = [A1048576].End(3).Row
  6. Set d = CreateObject("scripting.dictionary")
  7. For i = 2 To n
  8.     d(Cells(i, 1).Value) = ""
  9. Next

  10. m = d.Count

  11. For j = 0 To m - 1
  12.     Sheets(2).Copy
  13.     ActiveWorkbook.SaveAs ThisWorkbook.Path & "" & d.keys()(j)
  14.     [M2] = d.keys()(j)
  15.     k = 0
  16.     ThisWorkbook.Activate
  17.     For i = 2 To n
  18.         If Cells(i, 1) = d.keys()(j) Then
  19.             
  20.             Workbooks(d.keys()(j) & ".xlsx").Activate
  21.             Cells(16 + k, 1) = k + 1
  22.             [B16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 2)
  23.             [D16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 3)
  24.             [E16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 4)
  25.             [F16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 5)
  26.             [G16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 6)
  27.             [I16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 7)
  28.             [L16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 8)
  29.             [N16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 9)
  30.             [O16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 10)
  31.             [P16].Offset(k, 0) = ThisWorkbook.Sheets(1).Cells(i, 11)
  32.             
  33.             k = k + 1
  34.             ThisWorkbook.Activate
  35.         End If
  36.     Next
  37.     Workbooks(d.keys()(j) & ".xlsx").Activate
  38.     [A1].Select
  39.     Workbooks(d.keys()(j) & ".xlsx").Close 1
  40. Next

  41. Application.DisplayAlerts = True
  42. Application.ScreenUpdating = True
  43. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-11-28 17:55 | 显示全部楼层
本身简单 模板有很多合并单元格 使得代码非常长 没有合并单元格本身一句代码搞定的变成10来句 哎

TA的精华主题

TA的得分主题

发表于 2018-11-28 18:31 | 显示全部楼层
liujialin0o0 发表于 2018-11-28 15:41
把sheet2合同模板中黄色区域内容清除

给你小修改了一下代码 你的运行出错 这样就正常运行了

TA的精华主题

TA的得分主题

发表于 2018-11-28 18:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub test()
Application.DisplayAlerts = False
Application.ScreenUpdating = False

Set r1 = Sheets("订单汇总")
Set r2 = Sheets("合同模板")
n = r1.[A1048576].End(3).Row
Set d = CreateObject("scripting.dictionary")
For i = 2 To n
    d(r1.Cells(i, 1).Value) = ""
Next

m = d.Count

For j = 0 To m - 1
sr = d.keys()(j)
    r2.Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "" & sr
    [M2] = d.keys()(j)
    k = 0
    For i = 2 To n
        If r1.Cells(i, 1) = d.keys()(j) Then
With r1
            Cells(16 + k, 1) = k + 1
            [B16].Offset(k, 0) = .Cells(i, 2)
            [D16].Offset(k, 0) = .Cells(i, 3)
            [E16].Offset(k, 0) = .Cells(i, 4)
            [F16].Offset(k, 0) = .Cells(i, 5)
            [G16].Offset(k, 0) = .Cells(i, 6)
            [I16].Offset(k, 0) = .Cells(i, 7)
            [L16].Offset(k, 0) = .Cells(i, 8)
            [N16].Offset(k, 0) = .Cells(i, 9)
            [O16].Offset(k, 0) = .Cells(i, 10)
            [P16].Offset(k, 0) = .Cells(i, 11)
            
            k = k + 1
      End With
        End If
    Next
    ActiveSheet.Name = sr
    ActiveWorkbook.Close True
   
Next

Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-11-28 20:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cjc209 发表于 2018-11-28 18:32
Sub test()
Application.DisplayAlerts = False
Application.ScreenUpdating = False

太感谢了,6666

TA的精华主题

TA的得分主题

发表于 2018-11-28 20:26 | 显示全部楼层
Sub test()
Dim arr, k1, k2, d2
k1 = [a1].End(4).Row
k2 = [a1].End(2).Column
arr = [a1].Resize(k1, k2)

Set d2 = CreateObject("scripting.dictionary")
For i = 2 To k1
    If Not d2.exists(arr(i, 1)) Then
       d2(arr(i, 1)) = i
    Else
       d2(arr(i, 1)) = d2(arr(i, 1)) & "," & i
    End If
Next

''''''''''''''''''''''''''''''
Dim brr, d
brr = Worksheets("合同模板").[a14].Resize(1, 16)

Set d = CreateObject("scripting.dictionary")
For j = 1 To 16
    If brr(1, j) <> "" Then d(brr(1, j)) = j
Next

'''''''''''''''''''''''''''''''
Dim crr()
For Each element In d2.keys
k = 0
hth = Split(d2(element), ",")
ReDim crr(1 To 8, 1 To 16)

For i = 0 To UBound(hth) 'arr 行号=hth(i)
    k = k + 1
    crr(k, 1) = k
For j = 2 To k2 'arr 列号=j
    crr(k, d(arr(1, j))) = arr(hth(i) / 1, j)
Next j
Next i


With Worksheets("合同模板")
    .[m2] = element
    .[a16].Resize(8, 16) = crr
    .Copy
End With

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\合同号" & element & ".xlsx"
ActiveWorkbook.Close True
Next

End Sub

订单列表 合同模板.rar (20.65 KB, 下载次数: 88)

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 03:17 , Processed in 0.042104 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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