2015-11-16 2 views
0

J'essaie d'automatiser la création d'un publipostage dans Word à partir d'une feuille de calcul Excel. J'ai enregistré une macro qui en fait la majeure partie, mais l'enregistrement ne fonctionne pas lorsque la boîte de dialogue 'Modifier les destinataires' est ouverte, donc je dois aller dans le code VBA pour faire le tri et le filtrage. À l'heure actuelle tout le code est le suivant:Tri et filtrage d'un publipostage Word avec VBA

Sub Castingdirectors() 
' 
' Castingdirectors Macro 
' 
' 
    With ActiveDocument.MailMerge 
     .Destination = wdSendToNewDocument 
     .SuppressBlankLines = True 
     With .DataSource 
      .FirstRecord = wdDefaultFirstRecord 
      .LastRecord = wdDefaultLastRecord 
     End With 
     .Execute Pause:=False 
    End With 
    ChangeFileOpenDirectory "Y:\--file path redacted--\CASTING BOOK\" 
    ActiveDocument.SaveAs2 FileName:= _ 
     "Y:\--file path redacted--\Casting Directors.docx", FileFormat:= _ 
     wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _ 
     :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _ 
     :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _ 
     SaveAsAOCELetter:=False, CompatibilityMode:=14 
    ActiveWindow.Close 
End Sub 

Cela génère un publipostage de toutes les entrées.

J'ai besoin de filtrer de sorte que les entrées où le champ 'CASTING DIRECTOR SORT' est vide ne sont PAS inclus, et de trier par CASTING DIRECTOR SORT ascendant. Je peux le faire en insérant un champ 'skip record' dans le corps du document de publipostage Word et en faisant le 'sort' manuellement, mais j'essaye de créer un document de fusion 'maître', avec plusieurs macros assignés à des boutons de commande qui vont exécuter et sauvegarder différents publipostages avec différents tri/filtrage.

Répondre

0

C'est un bon début. Je pense que vous pouvez obtenir à peu près tout ce dont vous avez besoin en utilisant l'enregistreur de macros si vous allez plus loin dans la boîte de dialogue Modifier le destinataire. Regardez la liste des liens en bas - choisissez "Filtre".

Cela vous permet de définir les termes de requête ET de trier les enregistrements (le deuxième onglet de la boîte de dialogue). EDIT: Étant donné que l'enregistreur de macros ne capte plus cette information, vous devez obtenir le code de filtre de base d'une autre manière. Après avoir défini le filtre en utilisant la boîte de dialogue, créez une petite macro pour imprimer les informations de requête:

Sub GetQueryString() 
    Debug.Print ActiveDocument.MailMerge.DataSource.QueryString 
End Sub 

Cela devrait imprimer l'instruction SQL dans la fenêtre Exécution (Ctrl + G si vous n'êtes pas le voir) . Vous pouvez l'utiliser dans votre code "tel quel" s'il filtre et trie correctement les enregistrements. Ou vous pouvez le modifier en fonction de votre objectif.

+0

Merci pour votre réponse - malheureusement, je trouve que le Macro Recorder ne relève pas cela, et je suis également conscient de vouloir éviter d'utiliser la boîte de dialogue de filtrage car il est buggé (quelque chose que j'ai vu rapporté autre part). –

+0

Je ne suis pas au courant que la boîte de dialogue de niveau plus profond est boguée. Il remonte aux jours précédents et était toujours très fiable car il génère du SQL standard pour le filtrage. Pourriez-vous me montrer ce que vous avez lu ailleurs? Et avec quelle version de Word travaillez-vous? –

+0

Il y a une discussion des problèmes résultant de IS BLANK etc. dans certaines sources de données à http://answers.microsoft.com/en-us/office/forum/office_2007-word/mailmerge-gives-unexpected-results-when -filtre/fc6ebd5d-7320-4a21-866f-a3013e2f9090. Est-ce cela que vous voulez dire? –