首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Excel邮件合并保存到只有在最后一行中有数据的PDF

将Excel邮件合并保存到只有在最后一行中有数据的PDF
EN

Stack Overflow用户
提问于 2020-03-01 06:03:35
回答 1查看 100关注 0票数 0

我一直使用一个代码,它使用邮件合并从excel工作表到我的word模板,然后继续保存我的excel工作表中的所有行到PDF(当然是在word模板中)。-代码运行得很好。

守则摘自本论坛:

https://www.msofficeforums.com/mail-merge/21803-mailmerge-tips-tricks.html

我的Excel表是什么样的:

A1-E1 =标头

A2-E2 =数据

A3-E3 =数据

A4-E4 =数据

等等..。

代码当前的工作方式:

该代码将excel工作表中的所有数据行保存到我的word模板中(使用mailmerge),然后保存到PDF中。

我的目标:

我想要更改代码,所以它只将excel工作表中的最后一行数据保存到我的word模板(带有mailmerge)中,然后保存到PDF中。

代码语言:javascript
复制
Sub RunMerge()
' Sourced from: https://www.msofficeforums.com/mail-merge/21803-mailmerge-tips-tricks.html
' Note: this code requires a reference to the Word object model to be set, via Tools|References in the VBE.
Application.ScreenUpdating = False
Dim StrMMSrc As String, StrMMDoc As String, StrMMPath As String, StrName As String
Dim i As Long, j As Long
Const StrNoChr As String = """*./\:?|"
Dim wdApp As New Word.Application, wdDoc As Word.Document
wdApp.Visible = False
wdApp.DisplayAlerts = wdAlertsNone
StrMMSrc = ThisWorkbook.FullName
StrMMPath = ThisWorkbook.Path & "\"
StrMMDoc = StrMMPath & "MailMergeDocument.doc"
Set wdDoc = wdApp.Documents.Open(Filename:=StrMMDoc, AddToRecentFiles:=False, ReadOnly:=True, Visible:=False)
With wdDoc
  With .MailMerge
    .MainDocumentType = wdFormLetters
    .OpenDataSource Name:=StrMMSrc, ReadOnly:=True, AddToRecentFiles:=False, _
      LinkToSource:=False, Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;" & _
      "Data Source=StrMMSrc;Mode=Read;Extended Properties=""HDR=YES;IMEX=1"";", _
      SQLStatement:="SELECT * FROM `Sheet1$`"
    For i = 1 To .DataSource.RecordCount
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      With .DataSource
        .FirstRecord = i
        .LastRecord = i
        .ActiveRecord = i
        If Trim(.DataFields("Name")) = "" Then Exit For
        StrName = .DataFields("Name")
      End With
      .Execute Pause:=False
      For j = 1 To Len(StrNoChr)
        StrName = Replace(StrName, Mid(StrNoChr, j, 1), "_")
      Next
      StrName = Trim(StrName)
      With wdApp.ActiveDocument
        'Add the name to the footer
        '.Sections(1).Footers(wdHeaderFooterPrimary).Range.InsertBefore StrName
        '.SaveAs Filename:=StrMMPath & StrName & ".docx", FileFormat:=wdFormatXMLDocument, AddToRecentFiles:=False
        ' and/or:
        .SaveAs Filename:=StrMMPath & StrName & ".pdf", FileFormat:=wdFormatPDF, AddToRecentFiles:=False
        .Close SaveChanges:=False
      End With
    Next i
    .MainDocumentType = wdNotAMergeDocument
  End With
  .Close SaveChanges:=False
End With
wdApp.DisplayAlerts = wdAlertsAll
wdApp.Quit
Set wdDoc = Nothing: Set wdApp = Nothing
Application.ScreenUpdating = False
End Sub

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-03-01 08:28:18

取代:

代码语言:javascript
复制
For i = 1 To .DataSource.RecordCount

通过以下方式:

代码语言:javascript
复制
i = .DataSource.RecordCount

或者,如果在其他列下面有行在使用:

代码语言:javascript
复制
i = ActiveSheet.Range("A" & ActiveSheet.Rows.Count).End(xlUp).Row - 1

其中“A”是不包含最后一条记录以下数据的任何列,并删除这两种数据:

代码语言:javascript
复制
If Trim(.DataFields("Name")) = "" Then Exit For

以及:

代码语言:javascript
复制
Next i
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60472443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档