There are two basic approaches that can be used to run a mail merge without triggering the prompt. Note that the prompt is a security measure since the SQL a mail merge runs could cause harm to a system. The prompt ensures that the user is aware of this and (supposedly) only runs the mail merge if the document is from a "trusted source".
- Remove the data source from the main merge document, then add it explicitly using VBA every time document is opened.
The advantage to this approach is that it upholds Word's security setting. If the user allows the VBA to run, then supposedly the entire project is trusted, so attaching the data source using code is allowed.
The data source can be removed from the document by choosing the option to open the document without allowing the mail merge (the button labelled "No" in the version of Word I'm looking at). Save the document in that state. Add a line to your code that links in the data source before executing the mail merge.
In order to figure out the necessary syntax, you can either record a macro while connecting to the data source (this is most certain and fastest), or you can query the data source from the document before disconnecting it. In Word, in the Immediate Window (Ctrl+G) of the VBA Editor enter the ?
lines and press Enter, one-by-one:
?ActiveDocument.MailMerge.DataSource.Name
C:\Users\Cindy Meister\Documents\Personal\klpFeb00.mdb
?Document.MailMerge.DataSource.QueryString
SELECT * FROM `Q_MailMergeInvite`
Then
?ActiveDocument.MailMerge.DataSource.ConnectString
After pressing Enter for this one you should see something along the lines of
Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Users\[username]\Documents\Personal\Text.mdb;Mode=Read;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False
These, in double-quotes, are assigned to the Name
, SQLStatement
and Connection
parameters of Document.MailMerge.OpenDataSource
.
- Change the Registry setting to disable the prompt
This is described in the Knowledge Base article about the prompt.
The exact Registry key varies, depending on the version of Word, but follows the pattern
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Word\Options
The above is for Word 2013, version 15. Change it to 14 for Word 2010; 16 for Word 2016, etc.
A new Registry entry of the type DWord
needs to be created in this location, named SQLSecurityCheck
. Assign it the value 00000000
.