2017-07-20 122 views
0

我一直在試用我的宏進行測試,但不知何故,某些東西沒有工作。我嘗試錄製一個宏,並將其與我的代碼進行比較。錄製的宏工作。但是一旦我開始修改它,如果我運行宏,什麼都不會發生。(MS Word/VBA)當文檔打開時執行郵件合併

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

回答

0

有兩種可能的解決方法。

  1. 找出你的子DistricMailMerge實際上做了什麼。在第一行放置一個斷點並按F5。當它停止時,繼續按F8鍵並觀察它的哪一部分實際執行。
  2. 我對MailMerge並不熟悉。因此我從這裏開始: - https://msdn.microsoft.com/en-us/vba/word-vba/articles/mailmerge-object-word。我發現你的代碼和MS建議的完全不一樣。我對你的ActiveDocument.MailMerge.Destination = wdSendToNewDocument行感興趣,它似乎只是指定將合併發送到文檔而不指定哪一個,也不知道如何合併。 MS建議代碼解決這個問題。 沒有進一步研究,我發現爲什麼你的兩個版本中的一個實際上比另一個版本更強大的問題。
+0

其實我做了一些改變自己之後,我創造了另一個問題 郵件合併工作,如果我手動調用宏從 打開的Word文檔中的開發人員選項卡,但我不知道如何從Excel執行它 [這裏是問題的鏈接](https://stackoverflow.com/questions/45207127/running-mail-merge-from-excel-on-an-embedded-docx-word-file) – herman925

+0

我很高興你正在取得進展。您在新問題中描述的問題不是您在上述評論中描述的問題。看來你希望開始在Excel中工作。爲了在Excel中打開Word文檔並對其進行處理,您需要創建Word應用程序的實例。這並不困難。谷歌的「從Excel調用Word」的東西,你會發現很多代碼。 – Variatus

+0

請記住,您正在使用2個DLL。因此,當你聲明變量時,你應該指定它們是Word還是Excel。如果你不聲明Excel會假定他們是Excel的,那麼你的Word代碼將不會運行。 – Variatus