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

If worksheet name appears within range of cells then select

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

我目前有这个有效的代码:

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

这会将工作表 "Print - Cover" 和 "Print 2.2" 按预期保存为 PDF。我不想对工作表名称进行硬编码,而是希望保存其名称存在于单元格范围内的工作表。

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

列出的张数可能会增加或减少。

这样做的目的是让用户可以轻松地指出他们想要保存哪些工作表,而无需编辑宏。

我在工作表 1 的第二行开始使用 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 列中命名的工作表存在于当前工作簿中。

这是一个包含错误处理的简单方法:

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

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