ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Word > 如何运用VBA根据Excel花名册信息批量生成Word格式的退工证明单呢?

如何运用VBA根据Excel花名册信息批量生成Word格式的退工证明单呢?

作者:绿色风 分类: 时间:2022-08-17 浏览:160
楼主
0Mouse
Q:如何运用VBA根据Excel花名册信息批量生成Word格式的退工证明单呢?
花名册信息如图1所示,退工证明单模板如图2所示,如何快速将花名册中的信息逐行填入退工证明单模板中呢?要求:每页放两张证明单。图3是批量生成的退工证明单中的一个示例。
图1:花名册信息

 

图2:退工证明单模板

 

图3:生成的退工证明单示例

 

A:双击打开退工证明单模板文件,按<Alt+F11>组合键,依次单击“插入”-“模块”,在显示的空白窗口内粘贴以下代码,按<F5>键,稍等片刻即可在模板文件同一文件夹下生成“Result.docx”文件,此文件即为结果文件,而模板文件不受影响。
  1. Sub 运用VBA根据Excel花名册信息批量生成Word格式的退工证明单()
  2.     Dim Doc As Document, Arr, Rng As Range, i%, j%, sTxt$, mth
  3.     Set Doc = ThisDocument
  4.     With CreateObject("Excel.Application")
  5.         With .workbooks.Open(Doc.Path & "\date base.xlsx")
  6.             Arr = .activesheet.Range("A1").currentregion.Value
  7.             .Close False
  8.         End With
  9.         .Quit
  10.     End With
  11.     Set Rng = Doc.Range(0, Doc.Range.End - 1)
  12.     Selection.EndKey wdStory
  13.     With CreateObject("vbscript.regexp")
  14.         For i = 1 To UBound(Arr) - 2
  15.             Rng.Copy
  16.             With Selection
  17.                 .EndKey wdStory
  18.                 .Paste
  19.             End With
  20.         Next i
  21.         For i = 2 To UBound(Arr)
  22.             sTxt = Doc.Content
  23.             For j = 12 To 1 Step -1
  24.                 .Pattern = "A" & j
  25.                 For Each mth In .Execute(sTxt)
  26.                     With Doc.Range(mth.firstindex, mth.firstindex + mth.Length)
  27.                         Select Case j
  28.                             Case 2
  29.                                 .text = IIf(Arr(i, j) = "男", "R男 □女", "□男 R女")
  30.                                 If i Mod 2 = 0 Then
  31.                                     .Select
  32.                                     Selection.MoveUp wdLine, 3
  33.                                     Selection.Paragraphs.PageBreakBefore = True
  34.                                 End If
  35.                             Case 4
  36.                                 .text = IIf(Arr(i, j) = "全日制", "R全日制 □非全日制", "□全日制 R非全日制")
  37.                             Case 6
  38.                                 .text = IIf(Arr(i, j) = "合同终止", "R合同终止 □合同解除", "□合同终止 R合同解除")
  39.                             Case 10
  40.                                 .text = IIf(Arr(i, j) = "机要邮寄", "R机要邮寄 □单位自送", "□机要邮寄 R单位自送")
  41.                             Case 12
  42.                                 .text = IIf(Arr(i, j) = "已交", "R已交 □未交", "□已交 R未交")
  43.                             Case Else
  44.                                 If InStr("359", j) Then
  45.                                     .text = Format(Arr(i, j), "yyyy 年 m 月 d 日")
  46.                                 Else
  47.                                     .text = Arr(i, j)
  48.                                 End If
  49.                         End Select
  50.                     End With
  51.                 Next mth
  52.             Next j
  53.             sTxt = ""
  54.         Next i
  55.         .Global = True
  56.         .Pattern = "R"
  57.         sTxt = Doc.Content
  58.         For Each mth In .Execute(sTxt)
  59.             Doc.Range(mth.firstindex, mth.firstindex + 1).Font.Name = "Wingdings 2"
  60.         Next mth
  61.         .Pattern = " [年月日]"
  62.         For Each mth In .Execute(sTxt)
  63.             Doc.Range(mth.firstindex + 1, mth.firstindex + 2).Font.Underline = wdUnderlineNone
  64.         Next mth
  65.         ReDim Arr(1 To i - 2)
  66.         j = 0
  67.         .Pattern = "\d{17}(\d|X)"
  68.         For Each mth In .Execute(sTxt)
  69.             j = j + 1
  70.             Arr(j) = mth.firstindex
  71.         Next mth
  72.         For i = UBound(Arr) To 1 Step -1
  73.             For j = 17 To 0 Step -1
  74.                 Doc.Range(Arr(i) + j, Arr(i) + 1 + j).ModifyEnclosure wdEncloseStyleLarge, wdEnclosureSquare
  75.             Next j
  76.         Next i
  77.         sTxt = ""
  78.     End With
  79.     Selection.EndKey wdStory
  80.     Selection.TypeBackspace
  81.     sTxt = Doc.Path & "\Result.docx"
  82.     If Len(Dir(sTxt)) Then Kill sTxt
  83.     On Error Resume Next
  84.     Doc.SaveAs2 sTxt, wdFormatDocumentDefault
  85.     MsgBox "任务完成!", vbInformation, "报告"
  86. End Sub

附件:
批量生成退工单.rar
2楼
芐雨
学习
3楼
水星钓鱼
感谢分享
4楼
rongjun
学习了!

免责声明

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

评论列表
sitemap