【问题标题】:is there a way to PDF range of worksheets in Excel between two specific tabs using VBA?有没有办法在 Excel 中使用 VBA 在两个特定选项卡之间转换工作表的 PDF 范围?
【发布时间】:2020-01-08 22:11:21
【问题描述】:

试图弄清楚这是否可行,我知道如何通过 VBA 对特定的 Excel 工作表进行 PDF,但是是否可以通过指定开始和结束工作表来 PDF 范围内的工作表? 因此,如果工作簿中有 10 个工作表,即 Sheet1 到 Sheet10,我可以在 Sheet1 和 Sheet10 之间 PDF 工作表而不指定每个工作表吗? 谢谢。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可能想尝试做这样的事情。这将循环并将所有工作表创建为一个 pdf。这也会将它们写到您桌面的目录中。

    Sub createPdf()
    
    Dim SheetArr() As String
    Dim i As Integer
    Dim startSheet As Integer
    Dim endSheet As Integer
    
    startSheet = 1
    endSheet = 2
    Dim folderPath As String
    folderPath = "C:\Users\JMA337\Desktop\Pdfs" 'change to your user.
    MkDir (folderPath)
    
    For Each ws In ThisWorkbook.Worksheets 'This statement starts the loop
        If ws.Index >= startSheet And ws.Index <= endSheet Then ' <> "Sheet3" Then
            ReDim Preserve SheetArr(i)
            SheetArr(i) = ws.Name
    
            i = i + 1
            Debug.Print (ws.Name)
    
        End If
    Next
    
    Sheets(SheetArr).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=folderPath & "\Sales", _
    openafterpublish:=False, ignoreprintareas:=False
    
    MsgBox "All done with pdf's"
    
    End Sub
    

    【讨论】:

    • 所以循环工作,但有没有办法指定在特定工作表开始 PDF 文件?另外,按照你写出来的方式,如果在 Sheet3 之后有任何工作表,它也会正确地 PDF 并且不会在那里停止 PDF。
    • @John ,查看我的更新答案。使用这种方法,您只需在工作簿中从左到右决定什么是起始工作表什么是结束工作表。
    【解决方案2】:

    如果您尝试从特定工作表中获取一个 PDF,在您的代码中创建一个新工作簿,然后将您需要的特定工作表复制到该新工作簿中,然后使用 Workbook.ExportAsFixedFormat 方法来创建 PDF。

    根据我的个人经验,手动尝试执行您所描述的操作,Excel 确实希望这些工作表按连续顺序排列,而 workbook.exportasfixedformat 周围的文档没有提供有关为 PDF 选择工作表范围的足够详细信息。事实上,它的记录就像您使用 Word 一样,其中 To 和 From 参数正在寻找开始和结束的页码。这是将 Word 文档的一部分转换为 PDF 的一种非常直接的方法,但 Excel 工作簿的页面要模糊得多。

    【讨论】:

      【解决方案3】:

      听起来您需要创建一个循环。

      如果您只想 PDF 格式工作中的每张工作表,请使用 For Each 循环(对于 workbook.worksheets 中的每个 sht)

      如果您只想 PDF 格式的特定范围的工作表,例如工作表 1 到 10,即使工作簿有 20 个工作表,也可以创建一个带有变量(例如 intX)的循环。的范围将是 PDF 的工作表编号。在循环中,将每个工作表称为 'Sheets("Sheet" & intX) 以 PDF 格式。

      如果要将工作表打印为一个 PDF,请使用循环循环选择所需的工作表,将替换属性设置为 false

      For intX = 1 to 5
          Sheets("Sheet" & intX).Select False
      Next intX
      

      然后你可以在导出为固定格式时将选定的工作表视为一个实体。

      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strFolderPath & "\" & strFileName, Quality:=xlQualityMinimum, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
      

      【讨论】:

      • 嗯,这是有道理的,但不是为每个工作表创建单独的 pdf 而不是一个组合的 pdf?
      猜你喜欢
      • 2020-05-02
      • 2021-08-20
      • 2023-03-25
      • 2013-07-07
      • 2021-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多