2016-04-25 143 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都会生成一个新文档,这有助于防止编辑模板。非常感谢。 –