我正在开发一个 Access 数据库,该数据库生成一些邮件,并从 Access 数据库中的 VBA 代码调用邮件合并。问题是,如果我打开一个新的 Word 文档并启动邮件合并 (VBA),Word 会打开同一个 Access 数据库(已经打开)来获取数据。有什么办法可以防止这种情况发生吗?以便使用已经打开的数据库实例?
经过一些测试,我得到一个奇怪的行为:如果我打开持有 SHIFT 键的 Access 数据库,邮件合并不会打开同一数据库的另一个 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 如果有人能告诉我使用或不使用 SHIFT 键打开 Access 之间的确切区别,这也会有所帮助。如果可以编写一些 VBA 代码来启用“功能”,那么如果在没有 SHIFT 键的情况下打开数据库,它至少会“模拟”它。
干杯,格雷戈尔