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

时间:2015-09-28 23:08:35

标签: excel vba pdf save worksheet

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

我目前使用的代码有效:

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

这可以节省纸张和#34;打印 - 封面"和"打印2.2"按预期的PDF格式。我想保存那些在一系列单元格中存在名称的工作表,而不是硬编码工作表名称。

E.g。在我的ActiveSheet的单元格A1:A3中,我可以拥有 Bee,Cat和Dog ,并且宏

  • 选择工作表" Bee"," Cat"和"狗"
  • 但不是" Pig" ,它作为工作表存在但未列出。

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

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

2 个答案:

答案 0 :(得分:1)

我在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中命名的工作表存在于当前工作簿中。

答案 1 :(得分:0)

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

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

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