【问题标题】:Excel VBA Save multiple sheets from a range to a single PDFExcel VBA 将多个工作表从一个范围保存到一个 PDF
【发布时间】:2020-06-11 14:09:36
【问题描述】:

我目前正在处理工作簿,其中工作表(“STAM-Filialen”)的 A:A 列中几乎所有其他工作表的名称都是。我只想要在单个 PDF 中以 column("A:A") 命名的那些工作表。我使用的代码使它成为每个工作表的单独文件。是否可以使用某种相同的代码将其保存为单个 PDF?

Dim myCell As Range
Dim lastCell As Long
Dim PathName As String
lastCell = lastRow("STAM-Filialen")
PathName = Range("I10").Value

Worksheets("STAM-Filialen").Activate
For Each myCell In ThisWorkbook.Worksheets("STAM-Filialen").Range("A2:A" & lastCell).Cells
    Dim wksName As String
    wksName = myCell.Text
    ThisWorkbook.Worksheets(wksName).Range("A1:P60").ExportAsFixedFormat Type:=xlTypePDF, Filename:=PathName & "DispoPlan.Filiaal " & wksName & ".PDF"
Next

【问题讨论】:

  • @RyanWildry 你是对的。删除了关于 Union 的答案和评论,因为它不允许组合工作表。

标签: excel vba for-loop pdf


【解决方案1】:

我建议将所有值移到一张纸上打印。完成后删除此临时工作表。

这是一个将每个工作表中的每个范围并排放置在新工作表中的示例。

Option Explicit

Public Sub CreateSinglePDF()
    Dim ws As Range: Set ws = ThisWorkbook.Sheets(1).Range("A1:A4")
    Dim rangeDict As Object: Set rangeDict = CreateObject("Scripting.Dictionary")
    Dim cell As Range

    For Each cell In ws
        If Not rangeDict.exists(cell.Value) And cell.Value <> "" Then
            rangeDict.Add cell.Value, ThisWorkbook.Sheets(cell.Value).Range("A1:A5")
        End If
    Next

    Dim printsheet As Worksheet
    Set printsheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))

    Dim key As Variant
    Dim i As Long: i = 1
    For Each key In rangeDict
        printsheet.Range(printsheet.Cells(1, i), printsheet.Cells(5, i)).Value = rangeDict(key).Value
        i = i + 1
    Next

    printsheet.UsedRange.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\users\ryan\desktop\ExampleFile.pdf"
    printsheet.Delete
End Sub

【讨论】:

    【解决方案2】:

    要将多张工作表转换为单个 pdf 文档,

    1. 首先选择多张工作表
    2. 并使用 Activesheet.ExportAsFixedFormat 语句。
    3. 页面的打印范围可以在页面设置中设置。

    代码

       Sub test()
            Dim WB As Workbook
            Dim Ws As Worksheet
            Dim sht As Worksheet
            Dim PathName As String
            Dim vWs() as String '<~~ Variable change
            Dim rngDB As Range, rng As Range
            Dim n As Integer
    
            Set WB = ThisWorkbook
            Set Ws = WB.Worksheets("STAM-Filialen")
    
            PathName = Range("I10").Value
    
            With Ws
                Set rngDB = .Range("a1", .Range("a" & Rows.Count).End(xlUp))
            End With
    
            For Each rng In rngDB
                n = n + 1
                ReDim Preserve vWs(1 To n)
                vWs(n) = rng.text '<~~ text
                Set sht = Sheets(rng.Value)
                With sht.PageSetup
                    .PrintArea = "a1:p60"
                End With
            Next rng
            Sheets(vWs).Select '<~~ multiple sheets select
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:=PathName & "DispoPlan.Filiaal.PDF"
    
        End Sub
    

    工作表(“STAM-Filialen”)

    已选择特定表格

    单份pdf

    【讨论】:

    • 感谢您的回答。它适用于我现在可以查看的内容。我得到的唯一问题是 1 个数字 59,它找不到工作表(59_。你知道可能是什么问题吗?
    • 问题出在Set sht = Sheets(rng.Value)部分
    • @WouterGroeneneweg,检查 a 列中是否有任何不在实际工作表中的工作表名称。
    • @WouterGroeneweg,如果您的工作表名称是数字,请更改为 Set sht = Sheets(rng.text)
    • 这一变化有所帮助。我必须更改Sheets(vWs).Select 的部分才能使其正常工作?
    猜你喜欢
    • 2021-08-20
    • 2016-09-17
    • 2018-04-16
    • 2012-07-16
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多