将 Excel 工作表转换为 PDF,无限循环错误

Posted

技术标签:

【中文标题】将 Excel 工作表转换为 PDF,无限循环错误【英文标题】:Convert Excel Sheet to PDFs, Infinite Loop Error 【发布时间】:2021-10-28 21:25:13 【问题描述】:

我在论坛上使用了一些代码来创建一个宏,该宏可以从 Excel 中的单个工作表中导出 PDF。每个 PDF 都包含与员工相关的标题和所有相关行(所有带有员工 ID 的行)。当我运行它时一切顺利并且 pdf 是正确的,但是宏永远不会停止运行。

我相信我创建了一个无限循环,不知道如何纠正它。

它还会创建一个仅包含不需要的标题的 PDF。

Sub PracticeToPDF()

Dim ws As Worksheet
Dim ws_unique As Worksheet
Dim DataRange As Range
Dim iLastRow As Long
Dim iLastRow_unique As Long
Dim UniqueRng As Range
Dim Cell As Range
Dim LastRow As Long
Dim LastColumn As Long

Application.ScreenUpdating = False

'Note that the macro will save the pdf files in this active directory so you should save in an appropriate folder
DirectoryLocation = ActiveWorkbook.Path

Set ws = Worksheets("BootVSPayroll") 'Amend to reflect the sheet you wish to work with
Set ws_unique = Worksheets("BootVSPayroll") 'Amend to reflect the sheet you wish to work with

'Find the last row in each worksheet
iLastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
iLastRow_unique = ws_unique.Cells(Rows.Count, "A").End(xlUp).Row


With ws
    'I've set my range to reflect my headers which are fixed for this report
    Set DataRange = ws.Range("$A$1:$K$1" & iLastRow)

    'autofilter field is 4 as I want to print based on the practice value in column D
    DataRange.AutoFilter Field:=1

    Set UniqueRng = ws_unique.Range("A1:A20" & iLastRow_unique)
    For Each Cell In UniqueRng
        DataRange.AutoFilter Field:=1, Criteria1:=Cell

    Name = DirectoryLocation & "\" & Cell.Value & " BOOT Report" & ".pdf"

    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Name _
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=False

    Next Cell

End With
With ws
     .Protect Userinterfaceonly:=True, _
     DrawingObjects:=False, Contents:=True, Scenarios:= _
    True, AllowFormattingColumns:=True, AllowFormattingRows:=True
     .EnableOutlining = True
     .EnableAutoFilter = True
     If .FilterMode Then
        .ShowAllData
     End If
 End With
Application.ScreenUpdating = True

End Sub

【问题讨论】:

【参考方案1】:

您的意思是:

Set DataRange = ws.Range("$A$1:$K$1" & iLastRow)
...
Set UniqueRng = ws_unique.Range("A1:A20" & iLastRow_unique)

改为:

Set DataRange = ws.Range("$A$1:$K$" & iLastRow)
...
Set UniqueRng = ws_unique.Range("A1:A" & iLastRow_unique)

?

例如,如果(取自 ws_unique)您最后使用的行,iLastRow_unique 等于 200,那么 "A1:A20" & iLastRow_unique 等于 "A1:A20200"——这可能是您打算循环遍历的更多行,我想。

【讨论】:

你的巫师,谢谢乔治。我现在唯一需要修复的是它会创建一个额外的 pdf,其中只包含不必要的标题。 我不确切知道工作表是什么样的,所以我只是在这里吐口水,但我会试一试。 “额外”的 PDF 是它生成的第一个吗?如果是这样,您可能希望这些范围中的一个或两个从一行或一列开始。我的猜测是 UniqueRng 可能需要从 A2 而不是 A1 开始,但这又是一种盲目的猜测,没有看到工作表。相反,如果它是最后一个生成的 PDF,则可能是在最后一个“真实”之后的行中存在空格或其他一些意外内容,并且它正在创建一个 PDF。

以上是关于将 Excel 工作表转换为 PDF,无限循环错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将EXCEl中多张Sheet工作表转换成一个PDF

如何将EXCEl中多张Sheet工作表转换成一个PDF

问:如何将PDF文档(表格式的)转换为Excel格式?

将 Excel 工作表导出到 PDF 文件时出现奇怪的 Powershell 行为

怎么把多个excel转成一个pdf

将excel文件中选择的工作表打印为python中的pdf