【问题标题】:If worksheet name appears within range of cells then select如果工作表名称出现在单元格范围内,则选择
【发布时间】:2015-12-26 07:06:45
【问题描述】:

我希望能够将多个特定工作表保存到 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。我不想对工作表名称进行硬编码,而是希望保存名称存在于单元格范围内的任何工作表。

例如在我的 ActiveSheet 的单元格 A1:A3 中,我可以有 Bee、Cat 和 Dog,而宏会

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

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

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

【问题讨论】:

    标签: excel vba pdf save worksheet


    【解决方案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 列中命名的工作表存在于当前工作簿中。

    【讨论】:

      【解决方案2】:

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

      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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 2019-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多