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 - 循环遍历多个文件夹中的文件,复制范围,粘贴到此工作簿中