【问题标题】:Excel Mail Merge run time error 4198Excel 邮件合并运行时错误 4198
【发布时间】:2011-11-05 19:05:58
【问题描述】:

stackoverflow 上有个问题:
“是否可以从 excel 宏启动 MAIL MERGE(通过单击工作表上的按钮) 我有包含数据的 excel 表,想将其导出到新的 word 文档。” 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  

【问题讨论】:

  • 工作表是否命名为“Sheet1”?

标签: vba excel mailmerge


【解决方案1】:

您是否设置了对 Word 对象库的引用?如果不是,那么宏将失败,因为您使用的是在该库中找到的特定项目(例如 wdOpenFormatAuto)。

要添加对库的引用,请在 excel VBA 编辑器中单击工具>引用并向下滚动,直到找到“Micrsoft Word Object Library”,单击左侧的框以“检查”并单击“确定” .会有一个与之关联的版本号...可能是 14.0,因为您运行的是 Office 2010。

添加该引用应该可以解决您的问题。

如果你已经有了那套,请告诉我们。

【讨论】:

  • 谢谢justnS 436。这行得通。 Excel 先生的 Andrew Poulsom 说,设置 wdOpenFormatAuto:=0 也有效。同样的原因。
【解决方案2】:

在调用 OpenDataSource 之前放置一个人为的延迟,让 Open 方法有机会赶上来如何?这很丑陋,可能需要稍微清理一下以匹配 VBA 语法,但这里是:

For nI As Integer = 0 To 2500
  DoEvents()
Next

您还可以测试日期并让给定的时间过去(即 2 秒),然后再继续(这比任何 VB.Net 代码都多):

Dim dtDate As Date = Date.Now

Do While Date.Now.Subtract(dtDate).TotalSeconds < 2
  DoEvents()
Loop

【讨论】:

  • 我还有另外两个有效的答案,所以我将暂时离开。
猜你喜欢
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
相关资源
最近更新 更多