我們試圖在Access中自動執行郵件合併過程 - 單擊按鈕後,指定當前數據庫的VBA運行(accdb )作爲數據源並按照以下代碼運行SQL:訪問/ Word 2010 VBA郵件合併嘗試打開[Foldername] .mdb而不是ACCDB源
'Set up Word
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
'Make visible, open specified doc to merge
With objWord
.Visible = True
.Documents.Open strDocName
End With
'Set the data source path
Dim docPath As String
docPath = CurrentProject.Path & "\" & CurrentProject.Name
'Open the merge data source - simplified
objWord.activedocument.mailmerge.opendatasource _
Name:=docPath, _
SQLStatement:=strSQL
strDocName和strSQL傳入幷包含有效的功能內容。
它成功打開單詞,使其可見並打開要合併到的模板。然而,在那個時候,它出現要求確認數據源,並顯示可能的數據源列表。點擊'show all'複選框後,我可以通過ODBC(.mdb,.accdb)向下滾動到MS Access數據庫並從列表中選擇它。
它然後用標題爲「ODBC Microsoft Access驅動程序登錄失敗」,說一個盒子呈現「找不到文件:‘[路徑數據庫文件夾] /的.mdb [包含的文件夾的名稱]’」
所以,如果我的數據庫位於C:\ Temp中,則錯誤路徑將顯示爲'C:\ Temp.mdb'。將訪問數據庫移動到另一個文件夾會導致錯誤路徑更新,以根據包含文件夾查找相應命名的mdb文件。
我不知道它是否相關,但它似乎是在模板本身編輯模式下打開模板,而不是從該模板生成新文檔。
我在這裏錯過了什麼或有沒有人有任何想法?
乾杯
隨着Remou的協助之下,我們放棄了直接鏈接來訪問和使用來自Remou的建議鏈接到輸出的代碼到一個臨時文本文件,然後從那裏合併。
我們修改了代碼以刪除CurrentBackendPath()和更改的唯一參考這個功能如下:
Private Function GetStartDirectory() As String
'GetStartDirectory = CurrentBackendPath() & "mm\"
GetStartDirectory = CurrentProject.Path & "\mm\"
End Function
我們使用的唯一其他的修改是修改代碼具體到我們的目的。再次感謝大家的回覆。如果我有足夠的聲譽,我會鼓勵Remou的迴應!
根據MSDN(http://msdn.microsoft.com/en-us/library/office/ff841005.aspx),「*當通過開放式數據庫連接檢索數據(ODBC ),你指定一個連接字符串*「你似乎是提供文件路徑而不是連接字符串。 – HansUp
回覆:模板 - 使用Open方法打開現有文檔,在這種情況下是模板。如果要創建新文檔,請使用Documents.Add並將路徑作爲第一個參數傳遞給模板。請記住,Documents.Add將返回對新創建的文檔的引用。 –
@HansUp你看起來是正確的 - 我會在Remou的回答下面嘗試解決這個問題。感謝您的答覆! – WaideWalker