使用office 2007.我有一张带有一些宏的Excel表格,这些宏正在使用mailmerge创建一个word文档。问题是,当我第一次执行mailmerge时,我从保存前的excel表中获取数据。只有在第一次邮件合并之后,如果我再次保存Excel工作表(是的,我也在第一次邮件合并之前保存了它),第二个邮件将使用正确的信息。
执行的mailmerge总是在Excel文档中只有一行。所以它创建了一个输出文档。想象一下这是Excel专栏:
NAME INVOICENR AMOUNT
Peter 12345-001 400
我现在将数据更改为:
NAME INVOICENR AMOUNT
Nicolas 12345-004 3400
我保存文档并运行宏来运行邮件合并。我现在将获得一个包含Peter的创建文档。 如果我现在再次保存文档并再次运行宏,我将收到包含Nicolas的文档。
我在网上发现的唯一一件事就是:https://support.microsoft.com/kb/204542/en-us但是它指的是Office 2000所以我不知道它是否真的相关。
正在运行的宏在这里:
Sub RunSingleLine(template As String)
Dim CurrentRow As Integer
CurrentRow = 1 'Never needs to be anything else.
Dim wd As Object
Dim wdocSource As Object
Dim strWorkbookName As String
strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
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(template)
wdocSource.MailMerge.MainDocumentType = 0
wdocSource.MailMerge.OpenDataSource _
Name:=strWorkbookName, _
AddToRecentFiles:=False, _
Revert:=False, _
Format:=0, _
Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _
SQLStatement:="SELECT * FROM `Mergetable$`"
'Mergetable is a worksheet with the necessary info for the merge
With wdocSource.MailMerge
.Destination = 0
.SuppressBlankLines = True
With .DataSource
.FirstRecord = CurrentRow
.LastRecord = CurrentRow
End With
.Execute Pause:=False
End With
wd.Visible = True
wdocSource.Close SaveChanges:=False
Set wdocSource = Nothing
Set wd = Nothing
End Sub