2016-04-25 139 views
1

我試圖將excel文件的每一行epxort到一個新的pdf文件基於一個docx模板,其中包含此宏將從相關字段中搜索和替換的文本在Excel表格中。Excel-VBA Find.replace循環無法正常工作

問題是代碼僅在第一個循環中正常工作。第一次循環後,一個1.pdf文件從excel中導出爲具有正確的字段,但是現在將模板docx文件與excel中的數據一起保存,這導致結果稍後循環無法正常工作。出於某種原因,下一行的所有excel字段都會附加到模板的開頭。

請幫我改正這段代碼,以便每次循環運行正確。期望的結果是,每行excel只會被導出到一個新的pdf文件,而模板docx保持不變。

謝謝。

Sub ReplaceText() 
    Dim wApp As Word.Application 
    Dim wDoc As Word.Document 
    Dim z As Integer 
    Set wApp = CreateObject("Word.Application") 
    wApp.Visible = True 
    For z = 3 To 6 

    Set wDoc = wApp.Documents.Open("D:\test.docx") 

With wDoc 
.Application.Selection.Find.Text = "TIEU_DE" 
.Application.Selection.Find.Execute 
.Application.Selection = Range("B" & z) 
.Application.Selection.EndOf 

.Application.Selection.Find.Text = "ENGLISH" 
.Application.Selection.Find.Execute 
.Application.Selection = Range("C" & z) 
.Application.Selection.EndOf 

.Application.Selection.Find.Text = "tenTG" 
.Application.Selection.Find.Execute 
.Application.Selection = Range("D" & z) 
.Application.Selection.EndOf 

.Application.Selection.Find.Text = "Noidung" 
.Application.Selection.Find.Execute 
.Application.Selection = Range("E" & z) 
.Application.Selection.EndOf 

.SaveAs2 "D:\test.pdf", 17 

.Close SaveChanges = False 

    End With 
    Next z 

End Sub 
+0

感謝下面的答案,我的問題解決了:首先,使用「.Close SaveChanges:= False」;第二,使用「dotx作爲」模板文件格式而不是「docx」 –

回答

0

.Close SaveChanges = False給我一個編譯錯誤(變量未定義)

.Close SaveChanges := False適用於我,不保存更改。

在下一次迭代中將所有內容複製到文檔開頭的原因是find.execute方法不會移動選擇內容(因爲它什麼也沒找到),因此光標停留在文檔的開頭,但是您仍然複製單元格。

+0

謝謝。添加。關閉SaveChanges:= False使它工作,我沒有意識到我錯過了「:」。 –

0

相反test.docx使用Word模板test.dotx的(創建)

爲了節省PDF文件使用類似

 .ExportAsFixedFormat OutputFileName:="D:\test" & z & ".pdf", ExportFormat:= _ 
wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:=wdExportAllDocument, _ 
Item:=wdExportDocumentContent, IncludeDocProps:=True 

而不是之後添加

wDoc.Close saveChanges:=False 
Set wDoc = Nothing 
+0

這是一個非常好的主意。每次運行代碼時,使用test.dotx都會生成一個新文檔,這有助於防止編輯模板。非常感謝。 –