我对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
将感谢您的任何投入。让我知道我有什么办法可以进一步解释这个问题。
答案 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