2013-07-04 33 views
2

大家好!EXCEL VBA:在打印到PDF文件之前,Loop正在工作但未刷新

我有一個關於我的VBA代碼的問題。我真的只是想創建一個循環,打印基於相同的背景模板(這是在名爲AFFIDAVIT CREATOR工作表)中的PDF替換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 
+1

你有什麼這行'Sheets(「AFFIDAVIT CREATOR」)。Calculate'和它爲什麼不在'.Ex​​portAsFixedFormat ...'之前? –

+0

它實際上是/是。我甚至做了一件幼稚的事情,並在代碼中複製粘貼了20次,並且它不起作用。打印完所有頁面後,它仍然令人耳目一新!甚至試過:如果表格(「AFFIDAVIT CREATOR」)。計算然後ActiveSheet.ExportAsFixedFormat類型:= xlTypePDF,從:= 1,到:= 1,文件名:= ThisWorkbook.Path&「\」&表(「INPUT」 ).Cells(r,3)&「.pdf」_,Quality:= xlQualityStandard,IncludeDocProperties:= True,IgnorePrintAreas _:= False,OpenAfterPublish:= False Else Sheets(「AFFIDAVIT CREATOR」)。Calculate End If' – YannickHelmut

+0

I不知道它爲什麼會發生,但嘗試以下測試:B)在'.Ex​​portAsFixedFormat'之前插入'Stop'來檢查圖片是否在幾秒後加載,如果是這樣,則通過在IDE中按F5進一步運行子進程。 B)如果你移動'.ExportAsFixedFormat'來分隔'Sub onlyExport()',並且在'Call onlyExport'這個相同的地方從當前的地方調用它,那麼怎麼辦? –

回答

4

根據意見,如果Stop的方式工作,你需要約3秒,讓您的圖片加載,你可以嘗試使用wait workaround看起來如下:

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

添加代碼強制t之前.ExportAsFixedFormat。上面我設置了等待時間到5秒。你可以在一些測試後改變它。

+0

請評論,如果它的作品...如果是這樣我會保留答案,如果不是,我會刪除它... –

+0

完美延遲0.5秒,它會減慢這個過程比沒有過程要好! – YannickHelmut

+0

不錯的解決方案!這表明Loadpicture命令在自己的線程中運行......我想知道是否有一種方法可以「等待它完成」而不是等待一段固定的時間。 @KazJaw - 你有什麼想法嗎? – Floris