【问题标题】:Pre-fill Form, then Save to PDF预填表格,然后保存为 PDF
【发布时间】:2019-05-04 07:21:06
【问题描述】:

我对 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

到目前为止,此代码运行良好,但是,我没有每周打印大约 100 个“表单”表,而是试图弄清楚如何将这些“表单”中的每一个保存为 PDF 并将其保存到一个文件夹(基本上是打印每个表格,但作为数字副本)。

我已经完成了一半(我想)。运行下面的代码时,它可以在一个文件上完美运行(打印大约 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

不胜感激。如果有什么我可以做的来进一步解释这个问题,请告诉我。

【问题讨论】:

  • 您的第二个宏运行良好,我对其进行了测试并生成了 200 个 .pdf 文件。您是否尝试查找 400 错误是什么?
  • 文件名有问题 - 解决方案已相应更新。

标签: excel vba pdf pdf-generation


【解决方案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

【讨论】:

  • 您是说更改宏的名称可以修复宏?这不是答案;您的子名称不会影响您的代码运行方式,您可以调用它,Sub ManualevacuationofForm() 或您想要的任何其他名称,您的代码将正常工作。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多