【发布时间】: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