带有 Excel 数据的 Word Mail Merge 必须保存在具有自定义名称的不同文件中
Word Mail Merge with Excel data has to be saved in different files with custom names
我有一个非常具体的问题:我有一封用 Word 写的信和一个充满数据的工作表 Excel。我需要在使用工作表数据的 Word 中进行邮件合并。问题是:每个邮件合并都必须保存为不同的 Word 文件,而且每个文件都必须使用邮件合并中使用的数据的名称保存。
因此,例如:我的 Excel 有一个 table,其中包含 3 列,名称、姓氏、生日。这个 table 有 10 行。我需要在 Word 中使用名字、姓氏和生日进行邮件合并。每个邮件合并都必须保存在不同的文件中(因此,最后,我们将有 10 个文件,每行 1 个)。每个文件都必须命名为从邮件合并中提取的相对姓氏。
我在网上找到了这段 VBA 代码并在 Word 中试了一下:
' Modulo1 - Modulo'
Option Explicit
Public Sub Test()
On Error GoTo ErrH
Dim mm As Word.MailMerge
Dim i
Application.ScreenUpdating = False
Set mm = ThisDocument.MailMerge
With mm
.Destination = wdSendToNewDocument
With .DataSource
For i = 1 To .RecordCount
.FirstRecord = i
.LastRecord = i
mm.Execute
With Application.ActiveDocument
.SaveAs "C:\Users\Alessandro\Desktop\excel udine\TRIESTE\" & Format(i, "0000") _
, wdFormatDocument _
, AddToRecentFiles:=False
.Saved = True
.Close
End With
Next
End With
End With
ExitProc:
Application.ScreenUpdating = True
Set mm = Nothing
Exit Sub
ErrH:
MsgBox Err.Description
Resume ExitProc
End Sub
此代码可以完全按照我的需要保存每个邮件合并。唯一的问题是文件名是一个数字,如 0001、0002 等,我需要将该名称设置为我存储在 Excel 工作表中并在邮件合并中使用的值。
我设法找到了解决我自己问题的方法。我仍然不知道为什么我不能使旧代码工作,但这段代码工作得很好:
Public Sub Mail_Merge()
On Error GoTo ErrH
Dim mm As Word.MailMerge
Dim singleDoc As Document
Dim i
Dim nameFile As String
Dim path As String
path = "WRITE PATH TO SAVE FILE"
nameFile = "WRITE COLUMN NAME FROM MAIL MERGE"
Application.ScreenUpdating = False
Set mm = ThisDocument.MailMerge
mm.DataSource.ActiveRecord = wdFirstRecord
For i = 1 To mm.DataSource.RecordCount
mm.Destination = wdSendToNewDocument
mm.DataSource.FirstRecord = mm.DataSource.ActiveRecord
mm.DataSource.LastRecord = mm.DataSource.ActiveRecord
mm.Execute False
Set singleDoc = ActiveDocument
singleDoc.SaveAs2 _
FileName:=path & mm.DataSource.DataFields(nameFile).Value, _
FileFormat:=wdFormatDocumentDefault, _
AddToRecentFiles:=False
singleDoc.Close False
mm.DataSource.ActiveRecord = wdNextRecord
Next
ExitProc:
Application.ScreenUpdating = True
Set mm = Nothing
Exit Sub
ErrH:
MsgBox Err.Description
Resume ExitProc
End Sub
我有一个非常具体的问题:我有一封用 Word 写的信和一个充满数据的工作表 Excel。我需要在使用工作表数据的 Word 中进行邮件合并。问题是:每个邮件合并都必须保存为不同的 Word 文件,而且每个文件都必须使用邮件合并中使用的数据的名称保存。
因此,例如:我的 Excel 有一个 table,其中包含 3 列,名称、姓氏、生日。这个 table 有 10 行。我需要在 Word 中使用名字、姓氏和生日进行邮件合并。每个邮件合并都必须保存在不同的文件中(因此,最后,我们将有 10 个文件,每行 1 个)。每个文件都必须命名为从邮件合并中提取的相对姓氏。
我在网上找到了这段 VBA 代码并在 Word 中试了一下:
' Modulo1 - Modulo'
Option Explicit
Public Sub Test()
On Error GoTo ErrH
Dim mm As Word.MailMerge
Dim i
Application.ScreenUpdating = False
Set mm = ThisDocument.MailMerge
With mm
.Destination = wdSendToNewDocument
With .DataSource
For i = 1 To .RecordCount
.FirstRecord = i
.LastRecord = i
mm.Execute
With Application.ActiveDocument
.SaveAs "C:\Users\Alessandro\Desktop\excel udine\TRIESTE\" & Format(i, "0000") _
, wdFormatDocument _
, AddToRecentFiles:=False
.Saved = True
.Close
End With
Next
End With
End With
ExitProc:
Application.ScreenUpdating = True
Set mm = Nothing
Exit Sub
ErrH:
MsgBox Err.Description
Resume ExitProc
End Sub
此代码可以完全按照我的需要保存每个邮件合并。唯一的问题是文件名是一个数字,如 0001、0002 等,我需要将该名称设置为我存储在 Excel 工作表中并在邮件合并中使用的值。
我设法找到了解决我自己问题的方法。我仍然不知道为什么我不能使旧代码工作,但这段代码工作得很好:
Public Sub Mail_Merge()
On Error GoTo ErrH
Dim mm As Word.MailMerge
Dim singleDoc As Document
Dim i
Dim nameFile As String
Dim path As String
path = "WRITE PATH TO SAVE FILE"
nameFile = "WRITE COLUMN NAME FROM MAIL MERGE"
Application.ScreenUpdating = False
Set mm = ThisDocument.MailMerge
mm.DataSource.ActiveRecord = wdFirstRecord
For i = 1 To mm.DataSource.RecordCount
mm.Destination = wdSendToNewDocument
mm.DataSource.FirstRecord = mm.DataSource.ActiveRecord
mm.DataSource.LastRecord = mm.DataSource.ActiveRecord
mm.Execute False
Set singleDoc = ActiveDocument
singleDoc.SaveAs2 _
FileName:=path & mm.DataSource.DataFields(nameFile).Value, _
FileFormat:=wdFormatDocumentDefault, _
AddToRecentFiles:=False
singleDoc.Close False
mm.DataSource.ActiveRecord = wdNextRecord
Next
ExitProc:
Application.ScreenUpdating = True
Set mm = Nothing
Exit Sub
ErrH:
MsgBox Err.Description
Resume ExitProc
End Sub