动态保存excel中的PDF

时间:2017-04-05 15:56:30

标签: excel vba excel-vba

我在Excel中有一个表,并有一个宏将ActiveSheet保存为pdf。无论如何我可以:

  • 选择要打印的列。现在我只是隐藏它们。
  • 使用相同的名称保存多个pdf,并使用唯一的SKU连接:name_SKU.pdf
  • 过滤“SKU”列并保存该SKU的pdf并自动转到下一个唯一SKU并保存pdf等的方法。

目前我手动过滤SKU列,每次都点击“保存PDF”宏。我想将此任务简化为单击。

1 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。

首先,您可以使用此功能将每个纸张打印区域保存为PDF:

此函数接受fileName,可以根据需要从单元格值中解析,保存PDF的文件夹路径和从中获取打印区域的工作表。

Function PrintToPDF(fileName As String, folderPath As String, ByVal currentSheet As Worksheet)

currentSheet.Range(currentSheet.PageSetup.PrintArea).ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
folderPath & fileName & "_SKU.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

End Function

现在,您可以通过向函数添加其他参数来稍微编辑代码以仅打印自定义范围:

Function PrintToPDF(fileName As String, folderPath As String, ByVal currentSheet As Worksheet, printRange As String)

currentSheet.Range(printRange).ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
folderPath & fileName & "_SKU.pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

End Function

要使用此功能,请执行以下操作:

Sub test()
    Call PrintToPDF("name", "C:/Path/To/Folder/", Worksheets(1))
End Sub

或者在第二种情况下:

Sub test()
    Call PrintToPDF("1", "C:/Path/To/Folder/", Worksheets(1), "A1:C20")
End Sub

现在假设您有一个包含名称值和工作表编号的表(如果您不想使用打印区域,则为范围):

TEST1    1
TEST2    2
TEST3    3

然后遍历此表中的值并使用单元格值作为参数调用该函数:

Sub test()
    For i = 1 To Sheets(1).UsedRange.Rows.Count
        Call PrintToPDF(Sheets(1).Cells(i, 1).Value, "C:/Path/To/Folder/", Worksheets(Sheets(1).Cells(i, 2).Value))
    Next i
End Sub

或者您喜欢定义名称/工作表/范围范围。

希望这有帮助!