Excel 邮件合并为PDF而不是打印

Excel 邮件合并为PDF而不是打印,excel,vba,pdf,Excel,Vba,Pdf,我使用了电子表格页面Excel提示:Mail Merge-With Word中的教程,为100条记录创建了一个邮件合并样式的报告。使用记录索引和从另一个工作表中间接查找都可以很好地生成我需要的报告 我希望使用合并中的字段将每个输出保存为名为PDF的文件,而不是打印。我试图用“ActiveSheet.ExportasFixedFormat”替换“ActiveSheet.PrintOut”,并输入PDF规范。它在一定程度上起了作用,因为我能够生成指定位置的PDF,但它只生成一个PDF,而不是我试图创

我使用了电子表格页面Excel提示:Mail Merge-With Word中的教程,为100条记录创建了一个邮件合并样式的报告。使用记录索引和从另一个工作表中间接查找都可以很好地生成我需要的报告

我希望使用合并中的字段将每个输出保存为名为PDF的文件,而不是打印。我试图用“ActiveSheet.ExportasFixedFormat”替换“ActiveSheet.PrintOut”,并输入PDF规范。它在一定程度上起了作用,因为我能够生成指定位置的PDF,但它只生成一个PDF,而不是我试图创建的整个范围

这是我试图使用的代码。我已经浏览了其他答案,了解了如何循环浏览每条记录来创建单独的PDF,但一次只能生成一个PDF

Public Const APPNAME As String = "Progress Report"

Option Explicit

Sub PrintForms()
    Dim StartRow As Integer
    Dim EndRow As Integer
    Dim Msg As String
    Dim HRETID As String
    Dim i As Integer

Sheets("ProgressReport").Activate
StartRow = Range("StartRow")
EndRow = Range("EndRow")
HRETID = Range("HRETID")

 If StartRow > EndRow Then
    Msg = "ERROR" & vbCrLf & "The starting row must be less than the ending row!"
    MsgBox Msg, vbCritical, APPNAME
End If

For i = StartRow To EndRow
    Range("RowIndex") = i
        ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\Users\ewilliamson\PDFs\" & HRETID, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False
Next i
End Sub

您的filename:=赋值中的HRETID值似乎没有更改。(为此,需要为循环中的每一行分配一个新值)

如果要在列中循环以将该列中单元格的值分配给HRETID,请尝试以下操作:

Dim rItem as Range

for each ritem in Range("HRETID")
   ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:="C:\Users\ewilliamson\PDFs\" & ritem.value , _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False

next rItem

注意:您不需要将HRETID作为字符串,因为您可以从rItem获取单元格值。

如果您希望文件名是动态的,则需要从循环内的
HRETID
获取值,而不是在循环外仅获取一次:

For i = StartRow To EndRow
    Range("RowIndex") = i
        ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\Users\ewilliamson\PDFs\" & _
                   Range("HRETID").Value & ".pdf", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False
Next i

您希望PDF文件名来自何处?
Filename:=“C:\Users\ewilliamson\PDFs\”&HRETID&i&“.PDF”
至少会给您编号的副本最终,我希望文件名为“HRETID\u Date.PDF”。“HRETID”字段是基于“当前记录”索引的另一张工作表的间接查找,并随范围中的每一行而变化。我删除了HRETID,只使用了“I”变量,它可以生成我需要的PDF,但它们只是按顺序编号。如果有一种方法可以基于i变量包含HRETID并将其包含在文件名中,那么我就可以全部设置了。谢谢<代码>文件名:=“C:\Users\ewilliamson\PDFs\”&Range(“HRETID”).Value&“.pdf”应该可以,非常感谢!该工作表被构造为使用rowindex和来自另一个工作表的间接查找将信息编译为报告格式。HRETID是从另一张表中查找的变量之一。我能够使用上面的@Tim Williams响应生成编号的PDF,现在我只需要为查找的不同“HRETID”值切换“I”。我可能不正确地使用了“范围”。