我試圖從訪問中打開文檔,執行郵件合併,然後使用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