2017-07-20 1 views
0

J'ai essayé ma macro pour la tester, mais quelque chose ne fonctionne pas. J'ai essayé d'enregistrer une macro et j'ai comparé le code au mien. La macro enregistrée a fonctionné. Mais dès que j'ai commencé à le modifier, il ne se passerait rien si je cours la Macro.(MS Word/VBA) Exécution de la fusion et du publipostage à l'ouverture du document

J'ai mot bibliothèque d'objets

Travailler Macro:

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 

Macro qui ne fait rien (erreur très rarement comme indiqué ci-dessous):

Erreur d'erreur d'exécution '5852': L'objet demandé n'est pas disponible

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 

Répondre

0

Il existe deux approches possibles à votre problème.

  1. Découvrez ce que fait votre DistricMailMerge. Mettez un point d'arrêt dans sa première ligne et appuyez sur F5. Quand il atteint l'arrêt, continuez à appuyer sur F8 et regardez quelle partie s'exécute réellement.
  2. Je ne suis pas familier avec MailMerge. Par conséquent, je commence ici: - https://msdn.microsoft.com/en-us/vba/word-vba/articles/mailmerge-object-word. Je trouve que votre code est assez différent de ce que suggère MS. Je suis intrigué par votre ligne ActiveDocument.MailMerge.Destination = wdSendToNewDocument qui semble indiquer seulement que la fusion doit être envoyée à un document sans spécifier lequel, ni comment fusionner. Le code MS suggéré résout ce problème. Sans étudier plus loin, je trouve la question de savoir pourquoi l'une de vos deux versions fonctionne réellement beaucoup plus puissant que l'un pourquoi l'autre ne fonctionne pas.
+0

En fait, je fait quelques changements moi-même après et je créé une autre question Le publipostage fonctionne, si je l'appelle la macro manuellement à partir de l'onglet développeurs dans le document Word ouvert Mais je ne sais pas comment exécutez-le à partir d'Excel [Voici le lien vers la question] (https://stackoverflow.com/questions/45207127/running-mail-merge-from-excel-on-an-embedded-docx-word-file) – herman925

+0

Je suis content que vous progressiez. Le problème que vous décrivez dans votre nouvelle question n'est pas celui que vous décrivez dans votre commentaire ci-dessus. Il semble que vous souhaitiez commencer à travailler dans Excel. Pour ouvrir un document Word et le manipuler depuis Excel, vous devez créer une instance de l'application Word. Ce n'est pas difficile. Google pour quelque chose comme "appeler Word d'Excel" et vous trouverez beaucoup de code. – Variatus

+0

N'oubliez pas que vous utilisez 2 DLL. Par conséquent, lorsque vous déclarez des variables, vous devez spécifier s'il s'agit de Word ou d'Excel. Si vous ne déclarez pas qu'Excel supposera qu'ils sont Excel, votre code Word ne sera pas exécuté. – Variatus