ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎样用vba根据word模版的要求将图片分类批量插入?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-9-2 13:04 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lwz2019 于 2021-9-2 14:21 编辑

1.根据文件夹名新建对应名称的word文档(同目录即可);
2.将“封面模版”的内容拷贝到新建的word文档的首页;
3.将对应名称文件夹里的图片,按分类依次插入,每个新建的word完成后的字体、图片格式大小与“车辆档案模版”相同.4.图片1-9分别代表:1.身份证、2.驾驶证、3.行驶证、4.上岗证、5.验收合格证、6.强制险、7.商业险、8.验收表、9.安全协议书
5.图片量较大也涉及到隐私,我就不上传了,用的是风景图片替代的,看起来会比较费劲,拜请给位老师帮我看看,先谢了!

建立车辆档案.rar

1.78 MB, 下载次数: 53

TA的精华主题

TA的得分主题

发表于 2021-9-2 20:14 | 显示全部楼层
  1. Sub zldccmx()
  2.     Application.ScreenUpdating = False
  3.     Dim Nd As Document, Tb As Table
  4.     Set fso = CreateObject("Scripting.FileSystemObject")
  5.     Set f = fso.GetFolder(ThisDocument.Path)
  6.     pt = ThisDocument.Path & ""
  7.     arr = Array("身份证,2_2", "驾驶证,2_2", "行驶证,4_2", "上岗证,1_2", "验收合格证,1_2", "强制险,1_1", "商业险,1_1", "验收表,1_1", "安全协议书,1_1")
  8.     brr = Array("1-1.jpg", "1-2.jpg", "2-1.jpg", "2-2.jpg", "3-1.jpg", "3-2.jpg", "3-3.jpg", "3-4.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg")
  9.     p = 0
  10.     For Each E In f.SubFolders
  11.         Set Nd = Documents.Open(pt & "封面模板.docx")
  12.         With ActiveWindow.Selection
  13.             .EndKey Unit:=6
  14.             .InsertBreak Type:=2    '' 分节
  15.             .EndKey Unit:=6    '回到文档末尾
  16.             For I = 0 To UBound(arr)
  17.                 ww = Split(arr(I), ",")
  18.                 .Style = ActiveDocument.Styles("正文")
  19.                 .Font.Size = 24
  20.                 .Font.Name = "黑体"
  21.                 .TypeText ww(0)    '"身份证"
  22.                 .TypeParagraph
  23.                 .Style = ActiveDocument.Styles("正文")
  24.                 .Font.Size = 14
  25.                 tpsl = Split(ww(1), "_")
  26.                 cc = tpsl(1)    '尺寸
  27.                 tpsl = tpsl(0)    '数量
  28.                 If cc = 1 Then
  29.                     If tpsl = 1 Then
  30.                         rn = 1: cn = 1: rh = 22.5
  31.                     Else
  32.                         rn = 1: cn = 1: rh = 15
  33.                     End If
  34.                 Else
  35.                     Select Case tpsl
  36.                     Case 4
  37.                         rn = 2: cn = 2: rh = 5.2: cw = 7.5
  38.                     Case 2
  39.                         rn = 1: cn = 2: rh = 5.2: cw = 7.5
  40.                     Case 1
  41.                         rn = 1: cn = 1: rh = 11: cw = 15
  42.                     End Select
  43.                 End If
  44.                 Set Tb = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=rn, NumColumns:=cn, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed)
  45.                 With Tb
  46.                     .AutoFitBehavior wdAutoFitWindow
  47.                     .Style = "网格型"
  48.                     For j = 1 To 6
  49.                         .Borders(j).LineStyle = wdLineStyleNone
  50.                     Next
  51.                     .Borders.Shadow = False
  52.                     .Rows.WrapAroundText = True
  53.                     .Columns.PreferredWidthType = wdPreferredWidthPoints
  54.                     .Columns.PreferredWidth = CentimetersToPoints(cw)
  55.                     .Rows.HeightRule = wdRowHeightExactly
  56.                     .Rows.Height = CentimetersToPoints(rh)
  57.                 End With
  58.                 .EndKey Unit:=6
  59.                 For k = 1 To tpsl
  60.                     Select Case k
  61.                     Case 1
  62.                         Tb.Cell(1, 1).Select: .MoveLeft , 1
  63.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  64.                         Pic.LockAspectRatio = False
  65.                         Pic.Height = Tb.Rows(1).Height - 2
  66.                         Pic.Width = Tb.Columns(1).Width - 2
  67.                     Case 2
  68.                         Tb.Cell(1, 2).Select: .MoveLeft , 1
  69.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  70.                         Pic.LockAspectRatio = False
  71.                         Pic.Height = Tb.Rows(1).Height
  72.                         Pic.Width = Tb.Columns(2).Width - 2
  73.                     Case 3
  74.                         Tb.Cell(2, 1).Select: .MoveLeft , 1
  75.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  76.                         Pic.LockAspectRatio = False
  77.                         Pic.Height = Tb.Rows(1).Height
  78.                         Pic.Width = Tb.Columns(1).Width - 2
  79.                     Case 4
  80.                         Tb.Cell(2, 2).Select: .MoveLeft , 1
  81.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  82.                         Pic.LockAspectRatio = False
  83.                         Pic.Width = Tb.Columns(2).Width - 2
  84.                         Pic.Height = Tb.Rows(1).Height
  85.                     End Select
  86.                     p = p + 1
  87.                 Next
  88.                 .EndKey Unit:=6
  89.             Next
  90.         End With
  91.         Nd.SaveAs2 E & ".docx", fileformat:=16
  92.     Next
  93.     Application.ScreenUpdating = True
  94.     MsgBox "整理完事,个别图片需要手工调整一下即可。"
  95. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-9-2 20:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 zldccmx 于 2021-9-2 20:22 编辑

详见附件!

建立档案.zip

16.53 KB, 下载次数: 39

TA的精华主题

TA的得分主题

发表于 2021-9-2 20:18 | 显示全部楼层
此文件必须与封面模板文档存放在一起,位于车辆信息分类之上的目录。如图:
untitled1.png

TA的精华主题

TA的得分主题

发表于 2021-9-2 20:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-2 21:20 | 显示全部楼层
zldccmx 发表于 2021-9-2 20:18
此文件必须与封面模板文档存放在一起,位于车辆信息分类之上的目录。如图:

感谢老师的提醒!代码我运行了一下,如同老师所说只有几张小图需要调整一下就行了,其他的完全达到预期!就是信息量有点大,我还得慢慢领悟!再次感谢您的帮助!多谢了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-3 17:13 | 显示全部楼层
本帖最后由 lwz2019 于 2021-9-3 20:17 编辑

老师我今天用原始图片调试一下,发现第二页图片需要调整,主要是因为左边第一列的图片宽度都给设置上成了15(而实际应该要5.2,高度7.52没错),而第二列设置都对?我手动修改后(没改前所有图片宽度显示的是15左右,改后是7.52),如图就好了!本人初学vba,看了您的代码,改了半天也不对,主要是好多代码的意思还没弄懂!麻烦您再帮忙看看!应该怎样修改一下才行!
6CCFDB14-2DF8-4496-8D13-9A69E91D2D84.png
C41C8AAC-2C34-4ced-8DDB-7B14B06B1182.png
33EAE8F8-9508-4d4c-8662-107EC2CAD7D8.png
FEF65A08-1C48-4694-8E5D-EAB4A7CC4099.png

TA的精华主题

TA的得分主题

发表于 2021-9-5 14:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub zldccmx()
  2.     Application.ScreenUpdating = False
  3.     Dim Nd As Document, Tb As Table
  4.     Set fso = CreateObject("Scripting.FileSystemObject")
  5.     Set f = fso.GetFolder(ThisDocument.Path)
  6.     pt = ThisDocument.Path & ""
  7.     arr = Array("身份证,2_2", "驾驶证,2_2", "行驶证,4_2", "上岗证,1_2", "验收合格证,1_2", "强制险,1_1", "商业险,1_1", "验收表,1_1", "安全协议书,1_1")
  8.     brr = Array("1-1.jpg", "1-2.jpg", "2-1.jpg", "2-2.jpg", "3-1.jpg", "3-2.jpg", "3-3.jpg", "3-4.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg")
  9.     For Each E In f.SubFolders
  10.         p = 0
  11.         Set Nd = Documents.Open(pt & "封面模板.docx")
  12.         With ActiveWindow.Selection
  13.             .EndKey Unit:=6
  14.             .InsertBreak Type:=2    '' 分节
  15.             .EndKey Unit:=6    '回到文档末尾
  16.             For I = 0 To UBound(arr)
  17.                 ww = Split(arr(I), ",")
  18.                 .Style = ActiveDocument.Styles("正文")
  19.                 .Font.Size = 24
  20.                 .Font.Name = "黑体"
  21.                 .TypeText ww(0)    '"身份证"
  22.                 .TypeParagraph
  23.                 .Style = ActiveDocument.Styles("正文")
  24.                 .Font.Size = 14
  25.                 tpsl = Split(ww(1), "_")
  26.                 cc = tpsl(1)    '尺寸
  27.                 tpsl = tpsl(0)    '数量
  28.                 If cc = 1 Then
  29.                     If tpsl = 1 Then
  30.                         rn = 1: cn = 1: rh = 22.5
  31.                     Else
  32.                         rn = 1: cn = 1: rh = 15
  33.                     End If
  34.                 Else
  35.                     Select Case tpsl
  36.                     Case 4
  37.                         rn = 2: cn = 2: rh = 5.2: cw = 7.5
  38.                     Case 2
  39.                         rn = 1: cn = 2: rh = 5.2: cw = 7.5
  40.                     Case 1
  41.                         rn = 1: cn = 1: rh = 11: cw = 15
  42.                     End Select
  43.                 End If
  44.                 Set Tb = ActiveDocument.Tables.Add(Range:=Selection.Range, NumRows:=rn, NumColumns:=cn, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed)
  45.                 With Tb
  46.                     .AutoFitBehavior wdAutoFitWindow
  47.                     .Style = "网格型"
  48.                     For j = 1 To 6
  49.                         .Borders(j).LineStyle = wdLineStyleNone
  50.                     Next
  51.                     .Borders.Shadow = False
  52.                     .Rows.WrapAroundText = True
  53.                     .Columns.PreferredWidthType = wdPreferredWidthPoints
  54.                     .Columns.PreferredWidth = CentimetersToPoints(cw)
  55.                     .Rows.HeightRule = wdRowHeightExactly
  56.                     .Rows.Height = CentimetersToPoints(rh)
  57.                 End With
  58.                 .EndKey Unit:=6
  59.                 For k = 1 To tpsl
  60.                     Select Case k
  61.                     Case 1
  62.                         Tb.Cell(1, 1).Select: .MoveLeft , 1
  63.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  64.                         Pic.LockAspectRatio = False
  65.                         Pic.Height = Tb.Rows(1).Height - 2
  66.                         Pic.Width = Tb.Columns(1).Width - 2
  67.                     Case 2
  68.                         Tb.Cell(1, 2).Select: .MoveLeft , 1
  69.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  70.                         Pic.LockAspectRatio = False
  71.                         Pic.Height = Tb.Rows(1).Height
  72.                         Pic.Width = Tb.Columns(2).Width - 2
  73.                     Case 3
  74.                         Tb.Cell(2, 1).Select: .MoveLeft , 1
  75.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  76.                         Pic.LockAspectRatio = False
  77.                         Pic.Height = Tb.Rows(1).Height
  78.                         Pic.Width = Tb.Columns(1).Width - 2
  79.                     Case 4
  80.                         Tb.Cell(2, 2).Select: .MoveLeft , 1
  81.                         Set Pic = .InlineShapes.AddPicture(FileName:=E & "" & brr(p), LinkToFile:=False, SaveWithDocument:=True)
  82.                         Pic.LockAspectRatio = False
  83.                         Pic.Width = Tb.Columns(2).Width - 2
  84.                         Pic.Height = Tb.Rows(1).Height
  85.                     End Select
  86.                     p = p + 1
  87.                 Next
  88.                 .EndKey Unit:=6
  89.             Next
  90. ''''''''''''''''''''''''''''''''''
  91. '加入以下这个循环
  92.             For Each t In Nd.Tables
  93.                 If t.Range.Columns.Count > 1 Then t.Range.Cells.DistributeWidth
  94.             Next
  95. ''''''''''''''''''''''''''''''''''''''''''''
  96.         End With
  97.         Nd.SaveAs2 E & ".docx", fileformat:=16
  98.     Next
  99.     Application.ScreenUpdating = True
  100.     MsgBox "整理完事,个别图片需要手工调整一下即可。"
  101. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-9-5 14:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-9-5 15:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 12:41 , Processed in 0.051133 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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