Tôi có một trang tính excel với dữ liệu và muốn xuất nó sang một tài liệu từ mới. Có thể bắt đầu MAIL MERGE
từ macro excel bằng cách nhấp vào nút trên trang tính không?Thi hành Thư từ Hợp nhất
Trả lời
Nếu tài liệu Word của bạn đã được cấu hình với các trường hợp nhất, và bạn đang chạy vĩ mô từ bảng tính có chứa dữ liệu bạn muốn kết hợp vào tài liệu Word, sau đó thử này:
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
Nếu tài liệu từ của bạn đã được cấu hình với nguồn dữ liệu và bố cục các trường hợp nhất sau đó nó trở nên đơn giản hơn nhiều. Trong ví dụ bên dưới MailMergeLayout.doc là tất cả thiết lập sẵn sàng để thực hiện hợp nhất. Một nút trong Excel được liên kết với RunMailMerge() như dưới đây. Tất cả các mã được chứa trong một mô-đun VBA Excel.
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
Để có được giải pháp dendarii để làm việc tôi phải khai báo các hằng Word trong Excel VBA như sau:
' 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
Trên mã này là để mở một tài liệu từ MailMerge (với liên kết nguồn của nó và tất cả những gì tôi muốn là cho hộp thư "Opening the document will run the following SQL command "
được cung cấp cho người dùng, từ thời điểm đó, người dùng có thể chọn 'Yes'
hoặc '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
Điều này thậm chí còn không gần với một giải pháp cho câu hỏi. – robnick
- 1. Thực hành tốt nhất hợp nhất một phần SVN
- 2. Nhận các mục nhập hợp nhất/hợp nhất từ ABAddressBook
- 3. Thực hành tốt nhất: Môi trường hợp tác, Thư mục Bin, SVN
- 4. Tạo các tệp thi hành trong Linux
- 5. Gradle doFirst() Lệnh thi hành
- 6. MSBuild thi hành xác thực HintPath
- 7. F # Mã lệnh thi hành
- 8. Phát hiện tệp thi hành trong java
- 9. Thi hành các móc Git trên Windows
- 10. hủy kế hoạch thi hành di chúc
- 11. Cách tốt nhất để thực thi AppleScript từ Java
- 12. Sản xuất nhiều thực thi từ dự án duy nhất
- 13. Thực hành tốt nhất tích hợp Spock với Jenkins, Sonar
- 14. thực hành tốt nhất của django + PyMongo tổng hợp?
- 15. Tích hợp liên tục - Thực hành tốt nhất
- 16. Trích xuất tệp dự án Xcode từ tệp .ipa hoặc tệp thi hành
- 17. Cách dễ nhất để hợp nhất một bản phát hành vào một tệp JAR
- 18. codeblocks, dự án đơn lẻ, nhiều tệp thi hành
- 19. Tôi có thể thực hiện hợp nhất subtree từ thư mục con không?
- 20. Thư viện trăn phù hợp nhất cho Github API v3
- 21. hợp nhất hình ảnh từ Raphael svg
- 22. C++ 11: Universal thi hành di chúc
- 23. Lệnh thi hành trên python unittest
- 24. Tạo các tệp thi hành haskell nhỏ?
- 25. cmake thực hành tốt nhất
- 26. Thực hành tốt nhất: Thực thi giấy phép cho ứng dụng Java Desktop
- 27. subprocess.Popen() có hành vi không nhất quán giữa Eclipse/PyCharm và thực thi terminal
- 28. Bố cục SVN - thực hành tốt nhất
- 29. C# hợp nhất một thư mục với một số khác
- 30. htaccess thực hành tốt nhất
Điểm tốt, MattM. Nếu bạn không có bộ tham chiếu trong Excel VBA đối tượng Word (trong VBA Editor, Công cụ> Tài liệu tham khảo> Microsoft Word [phiên bản] Thư viện đối tượng), hằng số Word sẽ không hoạt động và bạn sẽ phải sử dụng giá trị của MattM thay thế. – dendarii