Excel邮件合并运行时错误4198

时间:2011-11-05 19:05:59

标签: vba excel-vba mailmerge excel

有关stackoverflow的上一个问题:
“是否可以从excel宏启动MAIL MERGE(通过单击工作表上的按钮) 我有数据的Excel表格,并希望将其导出到新单词doc。“ 这是在09年9月29日12:39由dendarii 772回答的。

我们也有此需求,因为我们希望简化计算机技能有限的志愿者的生活。

不幸的是,使用合适路径修改的dendarii代码在.OpenDataSource语句中以运行时错误4198退出。

Cindy Meister在Microsoft Office for Developer's Form上撰写> ..> Word 2010 VBA建议4198错误可能是由于同步性问题。我放弃了它没有成功。

安德鲁·普尔森(Andrew Poulson)在Excel上写道,鼓励贡献者Snecz将他的VBA邮件合并.OpenDataSource语句与Word宏录制进行比较。贡献者会怎么想?我的.OpenDataSource系列看起来很标准。我的Excel datasource文件有一行标题,后跟两行数据元素。

我们有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  

2 个答案:

答案 0 :(得分:3)

您是否有对Word对象库的引用?如果没有,那么宏将失败,因为您正在使用该库中的特定项目(如wdOpenFormatAuto)。

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

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

如果您已经拥有该套装,请告诉我们。

答案 1 :(得分:1)

如何在调用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