预先填写表格,然后保存为PDF

时间:2018-12-03 01:20:42

标签: excel vba excel-vba pdf pdf-generation

我对VBA来说还比较陌生,我正在学习中-如果有人能阐明我一直困扰着我的困境,我将不胜感激。

我有一些Excel文件,每个文件有2张(“表格”和“详细信息”)。根据“详细信息”中的值列表(例如名称,姓氏,日期等)填写“表单”工作表中的单元格,以自动进行预填充(通过vlookup等)。

到目前为止,我已经为文件分配了一个宏,以在不同的页面上打印出每个新的“表单”,如下所示。

Sub PrintForm()
  Dim i As Long
  Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = Sheets("Details")
    Set ws2 = Sheets("Form")

    '   2 assumes a header row - use 1 if there isn't one
    For i = 2 To ws1.Cells(Rows.Count, "A").End(xlUp).Row
        With ws2
            '   Populate the Forms sheet with employee names
            .Range("B2").Value = ws1.Cells(i, "A").Value
            .PrintOut

        End With
    Next i
End Sub

到目前为止,该代码一直运行良好,但是,我一直在设法弄清楚如何将每个“表单”保存为PDF并将其保存到PDF,而不是每周打印约100张“表单”表。文件夹(实质上是打印每个表格,但作为数字副本)。

我已经中途了(我想)。当运行下面的代码时,它可以完美地在一个文件上运行(打印大约7个表格)。但是在另一个带有较大“详细信息”表的文件中,它返回带有红叉的“ 400”消息,或者仅运行前20个值(仅有时)。不知道这意味着什么,或者我怎么解决。

Sub PrintForm()
  Dim i As Long
  Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = Sheets("Details")
    Set ws2 = Sheets("Form")

    '   2 assumes a header row - use 1 if there isn't one
    For i = 2 To ws1.Cells(Rows.Count, "A").End(xlUp).Row
        With ws2
            '   Populate the Forms sheet with employee names
            .Range("B2").Value = ws1.Cells(i, "A").Value

            .ExportAsFixedFormat _
                Type:=x1TypePDF, _
                Filename:="C:\Archive\Forms\" & .Range("B2") & ".pdf", _
                Quality:=x1QualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=False
        End With
    Next i

End Sub

将感谢您的任何投入。让我知道我有什么办法可以进一步解释这个问题。

1 个答案:

答案 0 :(得分:-1)

我通过交叉引用已经有效的工作表(将7个表格打印为PDF的文件)解决了该问题。

已将代码调整为从Sub PrintForms()开始 [在初始代码中是复数,而不是单数的Sub PrintForm()]。

已经成功完成了7份打印为PDF的表格的测试运行,并且保存到我指定的文件夹中。

希望这是问题所在,并且可以保存40多个文件! :)

更新:

实际上并没有支持40个以上的文件-错误在于“ B2”的返回值,其中包括受限制的字符-因此该文件无法自动保存。

我已经按照下面的代码对其进行了修复,将每个受限制的字符替换为一个空格。目前,该文件可以很好地运行40多个文件。

Sub PrintForms()
Dim i As Long
Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = Sheets("Details")
    Set ws2 = Sheets("Form")

    '   2 assumes a header row - use 1 if there isn't one
    For i = 2 To ws1.Cells(Rows.Count, "A").End(xlUp).Row
        With ws2
            '   Populate the Forms sheet with employee names
            .Range("B2").Value = ws1.Cells(i, "A").Value
            .ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:="C:\Folder1\Subfolder1\" & Replace(Replace(Replace(.Range("B2").Value, "?", ""), "/", ""), "*", "").Value & ".pdf", _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=False
        End With

End Sub