Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(MS Word/VBA)打开文档时执行邮件合并_Vba_Ms Word - Fatal编程技术网

(MS Word/VBA)打开文档时执行邮件合并

(MS Word/VBA)打开文档时执行邮件合并,vba,ms-word,Vba,Ms Word,我一直在尝试我的宏进行测试,但不知为什么有些东西不起作用。我试着录制一个宏,并将代码与我的进行了比较。录制的宏工作正常。但一旦我开始修改它,如果我运行宏,就不会发生任何事情 我有Word对象库 工作宏: Sub DistrictMailMerge() On Error GoTo NoKTOAccess ActiveDocument.MailMerge.Destination = wdSendToNewDocument RunMMKTO Exit Sub NoKTOAccess: If

我一直在尝试我的宏进行测试,但不知为什么有些东西不起作用。我试着录制一个宏,并将代码与我的进行了比较。录制的宏工作正常。但一旦我开始修改它,如果我运行宏,就不会发生任何事情

我有Word对象库

工作宏:

Sub DistrictMailMerge()
On Error GoTo NoKTOAccess

ActiveDocument.MailMerge.Destination = wdSendToNewDocument
RunMMKTO
Exit Sub

NoKTOAccess:
    If Err.Number = 5174 Then
        RunMMPEO
    End If
End Sub



Sub RunMMKTO()
'Wrong Filename for testing purpose'
'-----------------------------------
    ActiveDocument.MailMerge.OpenDataSource _
    Name:="\\Astc-ls-001\new_admin\File Sharing\001. KLN 1\Caseworkers\Herman\Masterlist One-Stop Portal.xlsm2", _
    ConfirmConversions:=False, _
    ReadOnly:=False, _
    LinkToSource:=True, _
    AddToRecentFiles:=False, _
    PasswordDocument:="", _
    PasswordTemplate:="", _
    WritePasswordDocument:="", _
    WritePasswordTemplate:="", _
    Revert:=False, _
    Format:=wdOpenFormatAuto, _
    Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=\\Astc-ls-001\new_admin\File Sharing\001. KLN 1\Caseworkers\Herman\Masterlist One-Stop Portal.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry ", _
    SQLStatement:="SELECT * FROM [CR Step 2 - Mail Merge List$] WHERE [ISS No#] LIKE '%-%'", _
    SQLStatement1:="", SubType:=wdMergeSubTypeAccess
    ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
End Sub



Sub RunMMPEO()
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "\\192.168.9.190\new_admin\File Sharing\Caseworkers\Herman\ISS OSP\Masterlist One-Stop Portal.xlsm" _
        , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=\\Astc-ls-001\new_admin\File Sharing\001. KLN 1\Caseworkers\Herman\Masterlist One-Stop Portal.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry " _
        , SQLStatement:="SELECT * FROM [CR Step 2 - Mail Merge List$] WHERE [ISS No#] LIKE '%-%'", _
        SQLStatement1:="", SubType:=wdMergeSubTypeAccess
    ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
End Sub
不执行任何操作的宏(很少出现如下所示的错误):

运行时错误“5852”的错误:请求的对象不可用


有两种可能的方法解决您的问题

  • 找出您的子
    发行版mailmerge
    的实际功能。在其第一行中放置断点,然后按F5。当它到达停止点时,继续按F8并观察它实际执行的部分
  • 我不熟悉邮件合并。因此,我从这里开始:-。我发现你的代码与微软的建议大不相同。我对您的行
    ActiveDocument.MailMerge.Destination=wdsendtoneewdocument
    很感兴趣,它似乎只指定要将合并发送到文档,而没有指定哪个文档,也没有指定如何合并。MS建议的代码解决了这个问题。 在没有进一步研究的情况下,我发现了一个问题:为什么你的两个版本中的一个实际上比另一个更有效,为什么另一个没有

  • 事实上,在那之后,我自己做了一些更改,并创建了另一个问题邮件合并是否有效,如果我从打开的Word文档的“开发人员”选项卡手动调用宏,但我不知道如何从Excel执行宏,我很高兴您取得了进展。你在新问题中描述的问题不是你在上述评论中描述的问题。似乎您希望开始使用Excel。为了打开Word文档并从Excel中对其进行操作,您需要创建Word应用程序的实例。这并不难。在谷歌上搜索“从Excel调用Word”之类的东西,你会发现很多代码。请记住,你使用的是2个DLL。因此,当您声明变量时,您应该指定它们是Word的还是Excel的。如果您不声明Excel将假定它们是Excel的,那么您的Word代码将无法运行。非常感谢。在我提出另一个问题之前,我会再挖掘一下
    Sub DistrictMailMerge()
    On Error GoTo NoKTOAccess
    
    ActiveDocument.MailMerge.Destination = wdSendToNewDocument
    RunMMKTO
    Exit Sub
    
    NoKTOAccess:
        If Err.Number = 5174 Then
            RunMMPEO
        End If
    End Sub
    
    
    Sub RunMMKTO()
    'Wrong Filename for testing purpose'
    '-----------------------------------
    With ActiveDocument.MailMerge
    .Destination = wdSendToNewDocument
    .OpenDataSource _
        Name:="\\Astc-ls-001\new_admin\File Sharing\001. KLN 1\Caseworkers\Herman\Masterlist One-Stop Portal.xlsm", _
        Format:=wdOpenFormatAuto, _
        Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=\\Astc-ls-001\new_admin\File Sharing\001. KLN 1\Caseworkers\Herman\Masterlist One-Stop Portal.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry ", _
        SQLStatement:="SELECT * FROM [CR Step 2 - Mail Merge List$] WHERE [ISS No#] LIKE '%-%'", _
        SQLStatement1:="", SubType:=wdMergeSubTypeAccess
    .ViewMailMergeFieldCodes = wdToggle
    .Execute
    End With
    End Sub
    
    
    
    Sub RunMMPEO()
    With ActiveDocument.MailMerge
    .Destination = wdSendToNewDocument
    .OpenDataSource _
        Name:="\\192.168.9.190\new_admin\File Sharing\Caseworkers\Herman\ISS OSP\Masterlist One-Stop Portal.xlsm", _
        Format:=wdOpenFormatAuto, _
        Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=\\Astc-ls-001\new_admin\File Sharing\001. KLN 1\Caseworkers\Herman\Masterlist One-Stop Portal.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry ", _
        SQLStatement:="SELECT * FROM [CR Step 2 - Mail Merge List$] WHERE [ISS No#] LIKE '%-%'", _
        SQLStatement1:="", SubType:=wdMergeSubTypeAccess
    .ViewMailMergeFieldCodes = wdToggle
    .Execute
    End With
    End Sub