Я работаю над базой данных Access, которая генерирует несколько писем с объединением писем, вызываемых из кода VBA в базе данных Access. Проблема в том, что если я открою новый документ Word и начну слияние почты (VBA), Word откроет ту же базу данных Access (которая уже открыта) для получения данных. Есть ли способ предотвратить это? Чтобы использовался уже открытый экземпляр базы данных?
После некоторого тестирования я получаю странное поведение: если я открываю базу данных Access, удерживая клавишу SHIFT, слияние почты не открывает другой экземпляр Access той же базы данных. Если я открываю базу данных Access, не удерживая клавишу, я получаю описанное поведение.
Код VBA слияния моей почты:
On Error GoTo ErrorHandler
Dim word As word.Application
Dim Form As word.Document
Set word = CreateObject("Word.Application")
Set Form = word.Documents.Open("tpl.doc")
With word
word.Visible = True
With .ActiveDocument.MailMerge
.MainDocumentType = wdMailingLabels
.OpenDataSource Name:= CurrentProject.FullName, ConfirmConversions:=False, _
ReadOnly:=False, LinkToSource:=False, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
SQLStatement:="[MY QUERY]", _
SQLStatement1:="", _
SubType:=wdMergeSubTypeWord2000, OpenExclusive:=False
.Destination = wdSendToNewDocument
.Execute
.MainDocumentType = wdNotAMergeDocument
End With
End With
Form.Close False
Set Form = Nothing
Set word = Nothing
Exit_Error:
Exit Sub
ErrorHandler:
word.Quit (False)
Set word = Nothing
' ...
End Sub
Все это делается с помощью Access / Word 2003.
Обновление № 1
Также было бы полезно, если бы кто-то мог сказать мне, в чем точная разница между открытием Access с помощью клавиши SHIFT или без нее. И если можно написать некоторый код VBA для включения «функций», то есть, если база данных открыта без клавиши SHIFT, она как минимум «имитирует» ее.
Cheers,
Грегор