Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Vba 从excel动态保存PDF_Vba_Excel - Fatal编程技术网

Vba 从excel动态保存PDF

Vba 从excel动态保存PDF,vba,excel,Vba,Excel,我在Excel中有一个表格,有一个宏将ActiveSheet保存为pdf。我是否可以: 选择要打印的列。现在我只是把它们藏起来 使用相同的名称保存多个pdf,并由唯一的SKU:name\u SKU.pdf连接 过滤列“SKU”并保存该SKU的pdf,自动转到下一个唯一SKU并保存pdf的方法,依此类推 目前,我手动过滤SKU列,每次单击“保存PDF”宏。我想将此任务简化为单击一次。有几种方法可以完成此任务 首先,您可以使用此功能将每个图纸打印区域保存为PDF: Function PrintT

我在Excel中有一个表格,有一个宏将ActiveSheet保存为pdf。我是否可以:

  • 选择要打印的列。现在我只是把它们藏起来
  • 使用相同的名称保存多个pdf,并由唯一的SKU:name\u SKU.pdf连接
  • 过滤列“SKU”并保存该SKU的pdf,自动转到下一个唯一SKU并保存pdf的方法,依此类推

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

有几种方法可以完成此任务

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

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
此函数用于输入文件名(可以根据需要从单元格值中解析)、要保存的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
现在,假设您有一个表,其中包含名称值和图纸编号(如果不想使用打印区域,还包括范围):

然后循环此表中的值,并使用单元格值作为参数调用函数:

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
或者根据您喜欢如何定义名称/工作表/范围


希望这有帮助

这当然是可能的。如果有人能看到现有代码,他们也会更容易向您展示如何修改现有代码。请将代码粘贴到问题中,否则您会发现您的问题因未提供代码而被否决。