![](/img/trans.png)
[英]In Word, how can I alter mail merge data programmatically with VBA?
[英]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.