Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 预先填写表格,然后保存到PDF_Excel_Vba_Pdf_Pdf Generation - Fatal编程技术网

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

Excel 预先填写表格,然后保存到PDF,excel,vba,pdf,pdf-generation,Excel,Vba,Pdf,Pdf Generation,我对VBA比较陌生,正在边走边学习——如果有人能告诉我一个困扰了我几个星期的难题,我会非常感激 我有几个Excel文件,每个文件有两张表单和详细信息。表格中的单元格根据详细值列表填写,例如姓名、姓氏、日期等,通过vlookup等自动预填写 到目前为止,我已经为文件分配了一个宏,用于在不同的页面上打印每个新表单,如下所示 Sub PrintForm() Dim i As Long Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = S

我对VBA比较陌生,正在边走边学习——如果有人能告诉我一个困扰了我几个星期的难题,我会非常感激

我有几个Excel文件,每个文件有两张表单和详细信息。表格中的单元格根据详细值列表填写,例如姓名、姓氏、日期等,通过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

如有任何意见,我们将不胜感激。让我知道我是否可以做些什么来进一步解释这个问题。

我已经通过交叉引用工作表解决了这个问题,该工作表已经可以工作,该文件将7个表单打印为PDF

已将代码调整为以子打印形式开始[复数形式,而不是初始代码中的单数子打印形式]

已成功将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的名称对代码的运行方式没有任何影响,您可以将其称为sub ManualVacutionOfform或其他任何您想要的名称,您的代码将正常工作。您的第二个宏运行良好,我对其进行了测试并生成了200个.pdf文件。您是否尝试查找400错误?问题在文件名中-解决方案相应更新。