我完全是VBA的新手,我正在编写一个代码,用于将excel工作表中每行的合并数据发送到某个word文档并保存该文档名称对应于每行的第一个单元格值。从excel工作表中选择只有一行(作为邮件合并的一部分)
每一行都包含客户端的信息。这就是为什么我必须单独邮寄每行信息。
到目前为止,代码工作正常,但有两个问题,我需要解决:
1)SQLStatement:="SELECT * FROM
工作表Sheet1 $ "
for循环的每次迭代中结束了从表中的所有行的邮件合并信息(在循环遍历每一行)。那么会发生什么呢,每个客户端的文档也包含其他客户端的数据(excel行)。
2)通常的自动化错误,除非我保持源文件文档打开。
那么有人可以告诉我如何从迭代已经到达的行中选择信息。
我试图SQLStatement:="SELECT rw.row* FROM
工作表Sheet1 $ "
但它不工作
任何帮助将是一件好事。 完整的代码是:
Sub RunMerge()
'booking document begins here
Dim wd As Object
Dim wdocSource As Object
Dim activedoc
Dim strWorkbookName As String
Dim x As Integer
Dim cdir As String
Dim client As String
Dim sh As Worksheet
Dim rw As Range
Dim rowcount As Integer
Set sh = ActiveSheet
For Each rw In sh.Rows
If sh.Cells(rw.Row, 1).Value = "" Then
Exit For
End If
cdir = "C:\Users\Kamlesh\Desktop\"
client = Sheets("Sheet1").Cells(rw.Row + 1, 1).Value
Dim newname As String
newname = "Offer Letter - " & client & ".docx"
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
Const wdFormLetters = 0, wdOpenFormatAuto = 0
Const wdSendToNewDocument = 0, wdDefaultFirstRecord = 1, wdDefaultLastRecord = -16
Set wdocSource = wd.Documents.Open("C:\Users\Kamlesh\Desktop\master\Regen-booking.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
wd.ActiveDocument.SaveAs cdir + newname
'wdocSource.Close SaveChanges:=False
'wd.Quit
Set wdocSource = Nothing
Set wd = Nothing
Next rw
End Sub
我的Excel工作表看起来像这样
BTW你为什么要创建和循环销毁对象,即外 –
一部分喔,雅只是习惯了这种VBA,因为这是一个任务上午诚实试图让输出。前天开始学习VBA。请提供一些关于您的建议的细节。这会非常有帮助。谢谢 –
'前天学习VBA开始''?:)如果你写这个代码,那么它真的很值得称赞:) –