我试图从访问中打开文档,执行邮件合并,然后使用VBA保存合并的文档输出。邮件合并访问 - 保存合并文档
这里是我当前的尝试:
Dim templateName as String, tempRoot as String
tempRoot = "C:\report\"
templateName = tempRoot & "template.doc"
Dim objDoc As Word.Document
Dim objWord As New Word.Application
Set objDoc = objWord.Documents.Open(templateName)
objWord.Visible = True
exportData "AnnualData", tempRoot & "annualData.txt" 'Outputs query to txt file for merge
objDoc.MailMerge.OpenDataSource NAME:= _
tempRoot & "annualData.txt", ConfirmConversions:=False, ReadOnly _
:=False, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:= _
"", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
Connection:="", SQLStatement:="", SQLStatement1:="", SubType:= _
wdMergeSubTypeOther
objDoc.MailMerge.Execute
objDoc.Close False 'Ideally after closing, the new document becomes the active document?
ActiveDocument.SaveAs tempRoot & "testReport.doc" 'And then save?
Set objWord = Nothing
Set objDoc = Nothing
我得到的合并的文档,但是,我无法保存。我收到一个错误消息,指出在没有文档打开时无法执行该命令。
如果任何人可以提供任何建议,将不胜感激。
当然objWord.ActiveDocument.SaveAs? – Fionnuala 2010-07-30 14:20:37
我是一个工具,并假定ActiveDocument将是一个objWord的方法...不是一些其他的随机对象。谢谢 – Mervyn 2010-07-30 14:58:34
可能你认为是因为你从Word复制了代码。换言之,应用程序是.ActiveDocument的默认父项。当运行相同的代码时,objWord对象变量是父代,因为它代表了Word应用程序。因此,由于任何未加前缀的命令都可能是Application对象的子对象,因此将代码转换为Access时,所有代码均以表示Word应用程序对象的对象变量为前缀。 – 2010-07-30 18:12:27