我有一个包含客户请求的 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”文件夹中。