如何使用VBA将Word邮件合并中的.OpenDataSource限制为仅1个记录?

时间:2016-09-12 20:37:27

标签: word-vba mailmerge

Word 2013,SQL Server 2014 我有一个Word Mail Merge模板,最初是为许可应用程序创建的,该应用程序使用.ini文件和Excel文件从多个数据集生成一个证书。

我想让Word模板独立工作。我能够连接一个.udl文件来建立与数据库的连接,但是它给了我所有的表,然后我选择了一个,然后它给了我一个文档,当我只需要一个时,该表中的每一行。

如何限制/过滤来自模板的文档,仅使用我请求的特定表格和特定行(license_id)?

Sub AutoNew()

'THIS RETURNS ALL ROWS AFTER I PICK A TABLE
With ThisDocument.MailMerge
    .OpenDataSource Name:="C:\Users\or0146575\Desktop\xxx.udl"
    .Execute
End With

End Sub

如果我知道如何,我会将下面的代码连接起来只返回1行。

Dim sql As String

sql = "SELECT full_name, BigLicenseType, LicNosDisplay, expiration_date FROM OpCerts WHERE person_id= 30012"

1 个答案:

答案 0 :(得分:0)

我决定采取完全不同的路线,并希望它不会减损我的观点。

使用像.udl或.odc这样的数据源文件会带回所有记录,并且需要在运行时选择表,我无法让sql工作。

我决定使用旧的ADODB(工具>参考中的Microsoft ActiveX Data Objects 2.5库)建立连接,并将值分配给mailmerge字段或DOCVARIABLE字段或书签,这些字段将起作用。将mailmerge用于一条记录没有任何意义。我希望这有助于某人。

Sub AutoNew()

Dim strWhat As String

strWhat = InputBox("Enter License ID", "OpCert Wall Certificate")


Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=DWS_Licenses;Data Source=WPDHSCLR16C"

conn.Open

Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT full_name, BigLicenseType, LicNosDisplay, expiration_date FROM OpCerts WHERE person_id=" & CInt(strWhat)


Dim rs As ADODB.Recordset
Set rs = cmd.Execute() 'Execute stored procedure.

'THIS WILL BE CHANGED TO BOOKMARK(S) PROBABLY IF DOCVARIABLES DOESN'T WORK
ActiveDocument.Variables("expiration_date").Value = rs(3)
'PUT full_name, BigLicenseType, LicNosDisplay TAGS HERE

rs.Close
 Set rs = Nothing

Set cmd = Nothing
conn.Close
Set conn = Nothing

End Sub