簡體   English   中英

(MS Word / VBA)打開文檔時執行郵件合並

[英](MS Word/VBA) Executing Mail Merge when document opens

我一直在嘗試使用Macro進行測試,但是某種方式無法正常工作。 我嘗試錄制宏並將代碼與我的代碼進行比較。 錄制的宏工作正常。 但是,一旦我開始對其進行修改,運行宏就不會發生任何事情。

我有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”的錯誤:請求的對象不可用

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

有兩種可能的方法來解決您的問題。

  1. 找出您的子DistricMailMerge實際做什么。 在其第一行中放置一個斷點,然后按F5。 當它到達停止點時,繼續按F8並觀察它實際執行的部分。
  2. 我對MailMerge不熟悉。 因此,我從這里開始: -https : //msdn.microsoft.com/zh-cn/vba/word-vba/articles/mailmerge-object-word 我發現您的代碼與MS建議的完全不同。 我對您的行ActiveDocument.MailMerge.Destination = wdSendToNewDocument感興趣,該行似乎僅指定將合並發送到文檔而不指定哪個文檔,也不指定如何合並。 MS建議的代碼解決了該問題。 在不做進一步研究的情況下,我發現了一個問題,為什么您的兩個版本之一實際上比另一個版本為什么功能更強大?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM