我有一個Excel數據表,並希望將其導出到一個新的Word文檔。點擊工作表上的按鈕,是否可以從excel宏啓動MAIL MERGE
?執行Word郵件合併
8
A
回答
16
如果您的Word文檔已與合併域配置,您正在運行從包含要合併到Word文檔中的數據的工作簿中的宏,那就試試這個:
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
1
如果你的Word文檔已經配置了數據源和合並字段佈局,然後它變得更簡單。在下面的示例中,MailMergeLayout.doc已準備好執行合併。 Excel中的按鈕鏈接到RunMailMerge()如下。所有代碼都包含在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
4
要獲得dendarii的解決方案來工作,我不得不在Excel VBA申報字常量,如下所示:
' Word constants
Const wdFormLetters = 0, wdOpenFormatAuto = 0
Const wdSendToNewDocument = 0, wdDefaultFirstRecord = 1, wdDefaultLastRecord = -16
0
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
上面的代碼是打開一個Word郵件合併文檔(其源鏈接,合併域代碼中的所有設置),我要的是消息框"Opening the document will run the following SQL command "
要提供給用戶,從此時開始,用戶既可以選擇'Yes'
或'No'
。
-1
Dim opt As String
opt = MessageBox("Opening the document will run the following SQL command", vbYesNo)
If opt = vbYes Then
'execute query
End If
+0
這甚至不太接近問題的解決方案。 – robnick 2017-02-28 00:28:43
相關問題
- 1. ASP.NET Word郵件合併
- 2. Word郵件合併字段
- 3. 使用NetOffice以編程方式執行Word郵件合併
- 4. (MS Word/VBA)當文檔打開時執行郵件合併
- 5. Word VBA郵件與附件合併
- 6. Word 2007郵件合併只包裝API
- 7. C中的Word郵件合併嚮導#
- 8. 用於SQL的Word郵件合併
- 9. Word打開XML郵件合併
- 10. Excel宏到Word郵件合併正試圖合併列中的所有行
- 11. 如何在Microsoft Word 2007郵件合併中壓縮空白行?
- 12. 如何在MS Word中隱藏郵件合併行結果?
- 13. MS Word郵件合併,多列成行,動態表
- 14. 使用郵件合併從excel文件生成word文檔
- 15. Access 2007郵件合併無法執行。 ODBC錯誤
- 16. 在C#中執行郵件合併時LibreOffice崩潰
- 17. 在Java中執行模板化郵件合併
- 18. 在Mac上使用郵件合併,使用Word 2016.合併到電子郵件是灰顯的/
- 19. 在Microsoft Word 2007郵件合併器中格式化數字
- 20. Word郵件合併不會正確顯示經過的秒數
- 21. 使用SQLite數據庫的MS Word郵件合併
- 22. 從ASP.NET Web應用程序合併Word郵件
- 23. 找到MS Word郵件合併數據源
- 24. 從dbgrid輸入數據到word郵件合併
- 25. Word中的問號郵件合併,如果語句
- 26. 用於ASP.NET服務器的Word郵件合併
- 27. 郵件合併Word 2003標題字段C#
- 28. 在郵件合併中使用Word用戶信息
- 29. 將數據庫中的HTML郵件合併到MS Word中
- 30. 使用下拉菜單選擇郵件合併模板 - Microsoft Word
好一點,MattM。如果在Excel VBA中沒有Word對象(在VBA編輯器,工具>參考> Microsoft Word [版本]對象庫)中設置了引用,那麼Word常量將不起作用,您將不得不使用MattM的值代替。 – dendarii 2013-02-27 09:53:08