J'ai une feuille Excel avec des données et je veux l'exporter vers un nouveau document Word. Est-il possible de démarrer MAIL MERGE
à partir d'une macro Excel en cliquant sur un bouton de la feuille?Exécution de Fusion et publipostage Word
Répondre
Si votre document Word est déjà configuré avec les champs de fusion, et que vous exécutez la macro du classeur qui contient les données que vous souhaitez fusionner dans le document Word, essayez ceci:
Sub RunMerge()
Dim wd As Object
Dim wdocSource As Object
Dim strWorkbookName As String
On Error Resume Next
Set wd = GetObject(, "Word.Application")
If wd Is Nothing Then
Set wd = CreateObject("Word.Application")
End If
On Error GoTo 0
Set wdocSource = wd.Documents.Open("c:\test\WordMerge.docx")
strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
wdocSource.MailMerge.MainDocumentType = wdFormLetters
wdocSource.MailMerge.OpenDataSource _
Name:=strWorkbookName, _
AddToRecentFiles:=False, _
Revert:=False, _
Format:=wdOpenFormatAuto, _
Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
SQLStatement:="SELECT * FROM `Sheet1$`"
With wdocSource.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
wd.Visible = True
wdocSource.Close SaveChanges:=False
Set wdocSource = Nothing
Set wd = Nothing
End Sub
Si Votre document Word est déjà configuré avec la source de données et la mise en page des champs de fusion, alors cela devient beaucoup plus simple. Dans l'exemple ci-dessous, MailMergeLayout.doc est prêt à effectuer une fusion. Un bouton dans Excel est lié à RunMailMerge() comme ci-dessous. Tout le code est contenu dans un module Excel VBA.
Sub RunMailMerge()
Dim wdOutputName, wdInputName As String
wdOutputName = ThisWorkbook.Path & "\Reminder Letters " & Format(Date, "d mmm yyyy")
wdInputName = ThisWorkbook.Path & "\MailMergeLayout.doc"
' open the mail merge layout file
Dim wdDoc As Object
Set wdDoc = GetObject(wdInputName, "Word.document")
wdDoc.Application.Visible = True
With wdDoc.MailMerge
.MainDocumentType = wdFormLetters
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.Execute Pause:=False
End With
' show and save output file
wdDoc.Application.Visible = True
wdDoc.Application.ActiveDocument.SaveAs wdOutputName
' cleanup
wdDoc.Close SaveChanges:=False
Set wdDoc = Nothing
End Sub
Pour obtenir la solution de dendarii au travail, je devais déclarer des constantes Word dans Excel VBA comme suit:
' Word constants
Const wdFormLetters = 0, wdOpenFormatAuto = 0
Const wdSendToNewDocument = 0, wdDefaultFirstRecord = 1, wdDefaultLastRecord = -16
Private Sub CommandButton1_Click()
Set wordapp = CreateObject("word.Application")
wordapp.documents.Open "C:\Documents and Settings\User\Desktop\mergeletter.doc"
wordapp.Visible = True
wrddoc = wordapp.documents("C:\Users\User\Desktop\sourceofletters.xls")
wrddoc.mailmerge.maindocumenttype = wdformletters
With wrddoc.activedocument.mailmerge
.OpenDataSource Name:="C:\Users\User\Desktop\sourceofletters.xls", _
SQLStatement:="SELECT * FROM `Sheet1`"
End With
End Sub
code ci-dessus est d'ouvrir un document Word de mailmerge (avec le lien source et codes de mergefield tous les paramètres) tout ce que je veux est pour la boîte de message "Opening the document will run the following SQL command "
être mis à la disposition de l'utilisateur, à partir de ce moment, l'utilisateur peut soit sélectionner 'Yes'
ou 'No'
.
Dim opt As String
opt = MessageBox("Opening the document will run the following SQL command", vbYesNo)
If opt = vbYes Then
'execute query
End If
Ce n'est même pas proche d'une solution à la question. – robnick
- 1. Fusion et publipostage de Word pour SQL
- 2. Application .NET qui doit intégrer la fonctionnalité "Fusion et publipostage"
- 3. Dans Word, comment puis-je modifier les données de fusion et publipostage par programme avec VBA?
- 4. Fusion et publipostage en C# avec n copies
- 5. Inspection d'une source de données de fusion et publipostage par programme
- 6. MS Word Office Automation - Remplissage des champs de formulaire texte et des champs de formulaire de case à cocher et de fusion et publipostage
- 7. Injection de données par style de fusion et publipostage dans des feuilles de calcul Excel existantes?
- 8. Fusion et publipostage à partir d'un ensemble de données en C# ASP.NET
- 9. Meilleure façon d'automatiser un processus de publipostage
- 10. Impression d'étiquettes de publipostage
- 11. Exécution de Word à partir d'un flux de travail SharePoint
- 12. Comment pouvez-vous définir des valeurs par défaut pour les champs de fusion dans un document Microsoft Word?
- 13. diff et fusion de XML
- 14. Est-il possible d'insérer un PDF dans un publipostage Word en utilisant C#
- 15. Fusion et formatage Excel
- 16. VSTO: Modification des onglets existants du ruban Word
- 17. Fusion et ajout de données avec SQLite
- 18. VSTO pour Word et Autotext
- 19. L'automatisation de Word Mailmerge ne fonctionne pas comme prévu
- 20. Java et exécution manuelle finalize
- 21. Conditionnement de script PowerShell et exécution WinNT?
- 22. Fusion des approches RDF et ORM
- 23. Spring @Transactional fusion et persisteront question
- 24. Fusion de deux tables
- 25. Comparaison Word By Word
- 26. Fusion de fichiers binaires
- 27. Outil de fusion sémantique
- 28. Tableau de fusion/Remplacer
- 29. Fusion de classes CSS
- 30. TortoiseSVN Fusion
Bon point, MattM. Si vous n'avez pas un ensemble de référence dans Excel VBA à l'objet Word (dans l'éditeur VBA, Outils> Références> Bibliothèque d'objets Microsoft Word [version]), les constantes Word ne fonctionneront pas, et vous devrez utiliser les valeurs de MattM au lieu. – dendarii