EXCEL VBA:循环正在工作,但在打印到 PDF 文件之前不刷新

Posted

技术标签:

【中文标题】EXCEL VBA:循环正在工作,但在打印到 PDF 文件之前不刷新【英文标题】:EXCEL VBA : Loop is working but not refreshing before printing to PDF file 【发布时间】:2013-07-02 05:40:29 【问题描述】:

大家早上好!

我的 VBA 代码有问题。我实际上只是想创建一个循环来打印基于相同背景模板(在名为 AFFIDAVIT CREATOR 的工作表中)的 PDF,替换 INPUT 工作表中的大约 4 个框(标签和图像)。

到目前为止,循环工作正常。唯一的问题: 它根据给定的名称(变量 r)生成 PDF 文件,但在导出为 PDF 后刷新工作表。结果:具有不同名称的多个文件,但它们都显示相同:(

有什么想法吗?

这是我的代码:

Private Sub TryMe()
Dim r As Long
Dim strCap As String
Dim strCap2 As String
r = 4

    Do Until Sheets("INPUT").Cells(r, 3).Value = ""

    strCap = Sheets("INPUT").Cells(r, 3).Value
    Sheets("AFFIDAVIT CREATOR").Label1.Caption = strCap

strCap2 = Sheets("INPUT").Cells(r, 5).Value
Sheets("AFFIDAVIT CREATOR").Label2.Caption = strCap2

If Sheets("INPUT").Cells(r, 4) = "OE" Then
    Sheets("AFFIDAVIT CREATOR").Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\OE_Logo.jpg")
Else
    Sheets("AFFIDAVIT CREATOR").Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\SF_Logo.jpg")
End If

If Sheets("INPUT").Cells(r, 6) = "OE" Then
    Sheets("AFFIDAVIT CREATOR").Image2.Picture = LoadPicture(ActiveWorkbook.Path & "\OE_Logo.jpg")
Else
    Sheets("AFFIDAVIT CREATOR").Image2.Picture = LoadPicture(ActiveWorkbook.Path & "\SF_Logo.jpg")
End If


ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, From:=1, To:=1, FileName:=ThisWorkbook.Path & "\" & Sheets("INPUT").Cells(r, 3) & ".pdf" _
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=False

Sheets("AFFIDAVIT CREATOR").Calculate

r = r + 1

Loop

End Sub

【问题讨论】:

你有什么Sheets("AFFIDAVIT CREATOR").Calculate这一行,为什么它不在.ExportAsFixedFormat ...之前?? 实际上是/曾经。我什至做了一件幼稚的事情,并在整个代码中复制粘贴了 20 次,但它不起作用。打印完所有页面后仍然令人耳目一新!甚至尝试过:If Sheets("AFFIDAVIT CREATOR").Calculate Then ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, From:=1, To:=1, FileName:=ThisWorkbook.Path & "\" & Sheets("INPUT").Cells(r, 3) & ".pdf" _ , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=False Else Sheets("AFFIDAVIT CREATOR").Calculate End If 我不知道为什么会这样,但请尝试以下测试: B) 在您 .ExportAsFixedFormat 之前插入 Stop 以检查图片是否在几秒钟后加载,如果是,请进一步运行子在IDE中按F5。 B)如果您将.ExportAsFixedFormat 移动到分隔Sub onlyExport() 并从当前在同一位置调用它,例如Call onlyExport... 当我停止时,它会在 3 秒左右后刷新。将它隔离到一个单独的子是行不通的,我已经尝试过了:(除了调用等待函数之外我能做什么的任何想法(该解决方案不起作用) 我给你一个临时答案... 放入 cmets 太长了... 【参考方案1】:

根据 cmets 的说法,如果 Stop 以您需要的方式工作大约。 3 秒加载图片,您可以尝试使用wait workaround,如下所示:

Dim Start As Single
Start = Timer
'wait 5 sec...
Do While Start + 5 > Timer
    DoEvents
Loop

.ExportAsFixedFormat 之前添加代码。上面我将等待时间设置为 5 秒。你可以在一些测试后改变它。

【讨论】:

如果可行,请发表评论...如果可以,我会保留答案,如果不行,我会删除它... 完美运行,延迟为 0.5 秒。它减慢了进程,但总比没有进程好! 不错的解决方案!这表明 Loadpicture 命令在其自己的线程中运行......我想知道是否有一种方法可以“等待它完成”而不是等待固定时间。 @KazJaw - 你有什么想法吗? @Floris,不幸的是,如果我知道我会把它贴在这里作为答案......但我可以承认,我没有尽最大努力搜索你描述的东西。 @Floris 是的,它可以生成 PDF。不幸的是,它不适用于常规打印方法(在第一页之后崩溃......)

以上是关于EXCEL VBA:循环正在工作,但在打印到 PDF 文件之前不刷新的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA函数仅粘贴打印区域内的内容而不是整个工作表?

Excel VBA在循环内复制和粘贴循环

Excel VBA - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中

每个工作表循环的 Excel VBA

pd.DataFrame 上的 for 循环继续运行,但在 100 次迭代后停止工作

Excel:打印所有工作簿,但在打印之前刷新(重新计算)每个选项卡