我有一个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. MS word邮件合并“&”
- 2. Word邮件合并字段
- 3. ASP.NET Word邮件合并
- 4. (MS Word/VBA)当文档打开时执行邮件合并
- 5. 使用NetOffice以编程方式执行Word邮件合并
- 6. Word VBA邮件与附件合并
- 7. Word打开XML邮件合并
- 8. Word 2007邮件与2列合并
- 9. CRM邮件合并和Word宏/ FILLINs
- 10. 在MS Word + Access邮件合并
- 11. C中的Word邮件合并向导#
- 12. 用于SQL的Word邮件合并
- 13. Excel宏到Word邮件合并正试图合并列中的所有行
- 14. 如何在MS Word中隐藏邮件合并行结果?
- 15. 运行Word 2010邮件合并访问没有查询提示
- 16. 如何在Microsoft Word 2007邮件合并中压缩空白行?
- 17. MS Word邮件合并,多列成行,动态表
- 18. 邮件合并的Excel到Word单个文件
- 19. 使用邮件合并从excel文件生成word文档
- 20. 在Java中执行模板化邮件合并
- 21. 在C#中执行邮件合并时LibreOffice崩溃
- 22. Access 2007邮件合并无法执行。 ODBC错误
- 23. 在Mac上使用邮件合并,使用Word 2016.合并到电子邮件是灰显的/
- 24. 表选择错误与邮件合并从Excel到Word
- 25. 找到MS Word邮件合并数据源
- 26. Word邮件合并不会正确显示经过的秒数
- 27. 用于ASP.NET服务器的Word邮件合并
- 28. 将Word邮件合并文档从2003转换为2010格式
- 29. Microsoft Word邮件合并数据源自动位置
- 30. 使用C#asp.nt插入邮件合并图像(word 2007)
好一点,MattM。如果在Excel VBA中没有Word对象(在VBA编辑器,工具>参考> Microsoft Word [版本]对象库)中设置了引用,那么Word常量将不起作用,您将不得不使用MattM的值代替。 – dendarii 2013-02-27 09:53:08