如果工作表名称出现在单元格范围内,则select

我希望能够将多个特定的工作表保存为PDF。

我目前有这个代码工作:

Sheets(Array("Print - Cover", "Print 2.2")).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile,Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=OpenPDFAfterCreating 

这将打印 – 封面和打印2.2页保存为预期的PDF。 而不是硬编码sheetnames,我想保存任何工作表有一个单元格范围内存在的名称。

例如,在我的ActiveSheet的单元格A1:A3中,我可以有蜜蜂,猫和狗 ,而macros将会

  • select工作表“蜜蜂”,“猫”和“狗”
  • 但不是“猪” ,作为工作表存在,但没有列出。

列出的页数可能会增加或减less。

这样做的目的是让用户可以轻松地指出他们想要保存哪些表而不必编辑macros。

这是一个包含error handling的简单方法:

 Sub PrintPDFs() Dim i&, n$, s$, v v = [a1:a3] On Error Resume Next For i = 1 To UBound(v) n = Worksheets(v(i, 1)).Name If Len(n) Then s = s & "," & n n = "" Next If Len(s) Then Worksheets(Split(Mid$(s, 2), ",")).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=OpenPDFAfterCreating End If End Sub 

注意:您可以在方括号中的顶部编辑该列表范围。

我已经在第二行开始使用Sheet1上的列B作为导出到PDF的工作表列表。

 Sub PDF_from_Range(Optional OpenPDFAfterCreating As Boolean = False) Dim v As Long, vWSs As Variant, PDFFile As String PDFFile = Environ("TEMP") & Chr(92) & "pdf_print_test" With Worksheets("Sheet1") ReDim vWSs(0) For v = 2 To .Cells(Rows.Count, "B").End(xlUp).Row vWSs(UBound(vWSs)) = .Range("B" & v).Value2 ReDim Preserve vWSs(0 To UBound(vWSs) + 1) Next v ReDim Preserve vWSs(0 To UBound(vWSs) - 1) End With Worksheets(vWSs).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFFile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=OpenPDFAfterCreating End Sub 

一维数组可以轻松地处理工作表名称的集合。 可以很容易地引入错误控制,以确保当前工作簿中存在列B中指定的工作表。