Mam arkusz programu Excel z danymi i chcę wyeksportować go do nowego dokumentu programu Word. Czy można uruchomić MAIL MERGE
z poziomu programu Excel, klikając przycisk na arkuszu?Wykonywanie programu Word Mail Merge
Odpowiedz
Jeśli dokument programu Word jest już skonfigurowany z pól korespondencji seryjnej, a używasz makro ze skoroszytu, który zawiera dane, które chcesz scalić do dokumentu programu Word, a następnie spróbuj tego:
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
Jeśli Twój dokument słowny jest już skonfigurowany ze źródłem danych i scalony układ pól, wtedy staje się znacznie prostszy. W poniższym przykładzie MailMergeLayout.doc jest gotowy do przeprowadzenia scalenia. Przycisk w Excelu jest połączony z RunMailMerge() jak poniżej. Cały kod znajduje się w 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
Aby uzyskać rozwiązanie Dendarianie do pracy musiałem zadeklarować stałe Worda w Excel VBA w następujący sposób:
' 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
Powyższy kod jest otwarcie dokumentu Word korespondencja seryjna (z linku źródłowym i kody wszystkich konfiguracji) wszystko, czego chcę, to udostępnienie użytkownikowi skrzynki komunikatów "Opening the document will run the following SQL command "
. Od tego momentu użytkownik może wybrać: 'Yes'
lub '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
Nie jest to nawet bliskie rozwiązania danego problemu. – robnick
- 1. Wykonywanie zewnętrznego programu java
- 2. Konwersja dokumentu programu Word do XSL-FO
- 3. Makro programu Word, przechowujące bieżący wybór (VBA)
- 4. Otwieranie i modyfikowanie dokumentu programu Word
- 5. Jak utworzyć dokument programu Word w WinRT
- 6. Automatyczne wykonywanie zrzutów ekranu okna programu
- 7. Przekształcanie dokumentu programu Word w użyteczny kod HTML w PHP
- 8. Jak Git Ignoruj zawiera "Tiu" Pliki programu Word
- 9. R eps eksport i import do programu Word 2010
- 10. Jak wstawić tabelę do dokumentu programu Word zamiast znacznika tekstowego?
- 11. Nie można otworzyć programu Word doc z COM w PHP
- 12. Jak mogę usunąć łamanie się stron z programu Microsoft Word?
- 13. Pomiń sprawdzanie gramatyki programu Microsoft Word 2007 pod kątem kodu
- 14. Wywoływanie programu Word dla konwersji rtf do docx
- 15. Konwertowanie znaków specjalnych programu Microsoft Word na PHP
- 16. Indeksowanie dokumentów programu Word i plików PDF za pomocą Sphinx
- 17. Jak utworzyć nagłówek/stopkę dokumentu programu Word w php
- 18. Edytowanie dokumentów Microsoft Word programowo
- 19. Office HTML Nagłówek Word
- 20. Kopiowanie z programu MS Word i wklejanie do problemu z tekstem sformatowanym
- 21. Jak zatrzymać wykonywanie procedury składowanej przy użyciu programu SQL Server?
- 22. Niewystarczający stos, aby kontynuować bezpieczne wykonywanie programu. ASP.NET MVC 4
- 23. niedopasowanie między RichTextBox i Word
- 24. Oracle MERGE nie INSERT
- 25. Big Merge/Zarządzanie pamięcią
- 26. Git Interactive Merge?
- 27. MERGE Naruszenie klucz podstawowy
- 28. Git2go - pull && merge
- 29. Concat VS Merge operaror
- 30. Telerik radgridview merge/group
Dobra uwaga, MattM. Jeśli nie masz zestawu referencyjnego w programie Excel VBA do obiektu programu Word (w edytorze VBA, Narzędzia> Biblioteki referencyjne> Microsoft Word [wersja] Object Library), stałe programu Word nie będą działać, a będziesz musiał używać wartości Matta zamiast. – dendarii