ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 如何根据工作表分别进行邮件合并

如何根据工作表分别进行邮件合并

作者:绿色风 分类: 时间:2022-08-18 浏览:105
楼主
芐雨
Q:如何根据工作表分别进行邮件合并?设计好一个word模板,但每次选择一张工作表作为数据源 进行邮件合并,然后保存 。再选在第二张工作表 。(一旦工作表多了就比较麻烦)


A:可以利用VBA来完成上面的操作


代码如下:
  1. Sub 邮件合并_芐雨()
  2.     Dim sht As Worksheet
  3.     Dim wdApp As Object
  4.     Dim DocName As String
  5.     Dim wbName As String
  6.     Application.ScreenUpdating = False  '关闭Excel屏幕更新,加快程序运行速度
  7.     ReDim arr(1 To Sheets.Count, 1 To 2)
  8.     For Each sht In Worksheets '把工作表的名称与对应的记录数放入数组
  9.         x = x + 1
  10.         arr(x, 1) = sht.Name
  11.         arr(x, 2) = sht.Cells(Rows.Count, 1).End(3).Row - 1
  12.     Next
  13.     DocName = "准考证.doc"
  14.     On Error Resume Next    '如果出错继续执行程序
  15.     Set wdApp = GetObject(, "word.application")
  16.     If wdApp Is Nothing Then
  17.         Set wdApp = CreateObject("word.application")
  18.         wdApp.Visible = True
  19.     End If
  20.     Set WdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\" & DocName)
  21.     wdApp.ScreenUpdating = False    '禁止Word屏幕更新,加快运行速度。
  22.     On Error GoTo 0
  23.     wbName = ThisWorkbook.FullName
  24.     For i = 1 To UBound(arr)
  25.     With WdDoc.MailMerge '邮件合并
  26.        .OpenDataSource Name:=wbName, _
  27.                                        ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
  28.                                        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
  29.                                        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
  30.                                        Connection:= _
  31.                                        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & wbName & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global " _
  32.                                      , SQLStatement:="SELECT * FROM [" & arr(i, 1) & "$]", SQLStatement1:="", SubType:= _
  33.                                        wdMergeSubTypeAccess

  34.             .Destination = wdSendToNewDocument
  35.             .SuppressBlankLines = True
  36.             With .DataSource
  37.                 .FirstRecord = 1               '合并记录从1到最后
  38.                 .LastRecord = arr(i, 2)
  39.             End With
  40.             .Execute Pause:=False
  41.         End With
  42.         With wdApp.ActiveDocument '按工作表的名称保存word
  43.             .SaveAs Filename:=ThisWorkbook.Path & "\" & arr(i, 1)
  44.             .Close
  45.         End With
  46.     Next
  47.     wdApp.Quit wdDoNotSaveChanges      '退出word
  48.     Application.ScreenUpdating = True
  49.     MsgBox "完成合并"
  50. End Sub

PS:如果路径过长,会提示字符串超过255!

附件 :

A.rar


免责声明

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

评论列表
sitemap