У меня есть пара отличных результатов, с которыми я балуюсь, практикуя VBA. У всех есть код для слияния почты. В одном Excel я вычитаю номер строки из строки, в которой находятся мои заголовки. Например, мои заголовки находятся в строке 22, а мои данные начинаются в строке 23. Поэтому я вычитаю 22 из номера строки, и оттуда начинается слияние почты (или только отсюда начинается подсчет записей. Я не уверен). Итак, если у меня есть 3 строки данных, это будут строки с 23 по 25. Код вычитает 22, и у меня остается 3 записи для слияния. Я изучаю VBA, поэтому мне трудно понять код, который мне нужен, чтобы выполнить только последнюю строку. Вот мой код слияния почты:
Private intakeForm As String
Private wdApp As Word.Application
Public newFilePath As String
Public newFolderName As String
Sub MailMergeAutomation()
Dim filePath As String
filePath = ThisWorkbook.Path & "\" & "Forms" & "\"
Dim wdDoc As Word.Document
Dim TargetDoc As Word.Document
Dim recordNumber As Long
Dim selRow As Range
Set selRow = Selection
intakeForm = "New Intake Form"
recordNumber = selRow.Row
Set fso = New Scripting.FileSystemObject
Set wdApp = New Word.Application
If wdApp Is Nothing Then
Set wdApp = New Word.Application
End If
Set fso = New FileSystemObject
With wdApp
.Visible = False
Set wdDoc = .Documents.Open(filePath & intakeForm)
wdDoc.MailMerge.MainDocumentType = wdFormLetters
wdDoc.MailMerge.OpenDataSource _
Name:=ThisWorkbook.Path & "\" & ThisWorkbook.Name, _
AddToRecentFiles:=False, _
Revert:=False, _
Format:=wdOpenFormatAuto, _
Connection:="Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";Mode=Read", _
SQLStatement:="SELECT * FROM [Headers]"
With wdDoc.MailMerge
.Destination = wdSendToNewDocument
With .DataSource
.FirstRecord = recordNumber - 22
.LastRecord = recordNumber - 22
'.ActiveRecord = .Ac
.LastRecord = recordNumber - 22
End With
.Execute Pause:=False
wdApp.Visible = False
Set TargetDoc = wdApp.ActiveDocument
TargetDoc.SaveAs2 Filename:=ThisWorkbook.Path & "\" & Sheet1.Cells(recordNumber, 3) & " " & "- intakeForm.docx"
wdDoc.Close SaveChanges:=False
End With
End With
Set wdDoc = Nothing
wdApp.Quit
Set wdApp = Nothing
End Sub