繁体   English   中英

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

[英]How Can I Limit an .OpenDataSource in Word Mail Merge to Only 1 Record Using VBA?

Word 2013、SQL Server 2014 我有一个 Word 邮件合并模板,该模板最初是为许可应用程序创建的,该模板使用 .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"

我决定走一条完全不同的路线,希望它不会减损我的观点。

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

我决定与旧的 ADODB(工具 > 参考中的 Microsoft ActiveX 数据对象 2.5 库)建立连接,并将值分配给邮件合并字段或 DOCVARIABLE 字段或书签,无论哪个都有效。 仅对一条记录使用邮件合并是没有意义的。 我希望这可以帮助某人。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM