stackoverflow 上有一个先前的问题:
“是否可以从 excel 宏启动 MAIL MERGE(通过单击工作表上的按钮)我有包含数据的 excel 工作表并希望将其导出到新的 word doc。” dendarii 772 在 2009 年 9 月 29 日 12:39 回答了这个问题。
我们也有这种需求,因为我们想简化计算机技能有限的志愿者的生活。
不幸的是,dendarii 的代码使用合适的路径进行了修改,在 .OpenDataSource 语句中以运行时错误 4198 退出。
Cindy Meister 在 Microsoft Office for Developer's Form 上写作> ..> Word 2010 VBA 建议 4198 错误可能是由于同步问题。我没有成功。
Andrew Poulson 在 Excel 先生上的文章鼓励贡献者 Snecz 将他的 VBA 邮件合并 .OpenDataSource 语句与 Word 宏记录进行比较。贡献者是怎么想的?我的 .OpenDataSource 行似乎是标准的。我的 Excel 数据源文件有一行标题,后跟两行数据元素。
我们有 Office 2010。
对于如何修复 4198 以及是否有人知道一般诊断程序的任何建议,我将不胜感激。我们是为慈善组织工作的两个人。欢迎任何帮助!
Sub RunMerge()
Dim wd As Object
Dim wdocSource As Object
Dim strWorkbookName As String
On Error Resume Next
Set wd = GetObject(, "Word.Application")
If wd Is Nothing Then
Set wd = CreateObject("Word.Application")
End If
On Error GoTo 0
Set wdocSource = wd.Documents.Open("C:\Users\george\Desktop\VBA Project\Mergeletter.docx")
strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
wdocSource.MailMerge.MainDocumentType = wdFormLetters
wdocSource.MailMerge.OpenDataSource _
Name:=strWorkbookName, _
AddToRecentFiles:=False, _
Revert:=False, _
Format:=wdOpenFormatAuto, _
Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
SQLStatement:="SELECT * FROM `Sheet1$`"
With wdocSource.MailMerge
.Destination=wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
wd.Visible = True
wdocSource.Close SaveChanges:=False
Set wdocSource = Nothing
Set wd = Nothing
End Sub