Excel 宏/VBA:如何将一系列行导出为 PDF

Excel 宏/VBA:如何将一系列行导出为 PDF

我有一个包含客户请求的 Excel 工作表。我想将每个客户请求的列表导出到不同的 PDF 工作表。例如,A 列包含客户名称(CustA、CustB、CustC、CustA 等),该名称不是唯一的,因为给定客户可以有多个请求。

我想要获取所有带有“CustA”的行并将其导出为 PDF,然后获取所有带有 CustB 的行并将其导出为另一个 PDF 等等。

我已经完成了 90%。以下代码有效……除了生成的 PDF 每页有 1 行。我希望所有行(例如 CustA 的所有请求)都位于单个页面上(如果有许多请求,则位于多个页面上,但不是每页一行)。

问题要么在于我使用 Union 方法的方式,要么在于 ExportAsFixedFormat 函数。

以下是代码:

Sub ExportToPDF()

    'Declare variables
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim dict As Object
    
    'Set the worksheet you want to search
    Set ws = ThisWorkbook.Worksheets("Requests")
    
    'Set the range you want to search
    Set rng = ws.Range("A6:I30")
    
    'Create a dictionary object to store the values of column A and their corresponding rows
    Set dict = CreateObject("Scripting.Dictionary")
    
    'Loop through each cell in the range
        For Each cell In rng.Columns(2).Cells
        
        'Check if the cell value is not empty
        If cell.Value <> "" Then
            'If the cell value is not empty, add it to the dictionary
            If dict.Exists(cell.Value) Then
                'If the value already exists in the dictionary, append the row number to the existing array
                dict(cell.Value) = dict(cell.Value) & "," & cell.Row
            Else
                'If the value does not exist in the dictionary, create a new array with the row number
                dict.Add cell.Value, cell.Row
            End If
        End If
    Next
    
    'Loop through each key in the dictionary
        For Each Key In dict.Keys
        
        'Split the array of row numbers into a range
        Dim rows As Range
        Dim ListRows As Variant
        Dim count As Integer
        count = 1
        
        ListRows = Split(dict(Key), ",")
        
        For Each num In ListRows
            If count = 1 Then
                Set rows = ws.rows(num)
                count = count + 1
            Else
                Set rows = Union(rows, ws.rows(num))
            End If
            
        Next
                        
        'Export the rows to a PDF file
        rows.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\temp\" & Key & ".pdf", Quality:=xlQualityStandard
    Next

End Sub

此宏将搜索名为“Feuille de temps”的工作表上的 A6:I30 范围,并创建一个字典对象,其中 B 列的所有不同值作为键,相应的行作为值。然后,它将循环遍历字典中的每个键,并将行导出到单独的 PDF 文件,并根据键的值命名每个文件。PDF 文件将保存在“C:\temp”文件夹中。

相关内容