Как отправить слияние только последней строки - PullRequest
0 голосов
/ 18 июня 2020

У меня есть пара отличных результатов, с которыми я балуюсь, практикуя 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

1 Ответ

0 голосов
/ 18 июня 2020

Самый простой и простой способ получить последнюю строку - это обычно что-то вроде sht.Cells(sht.Rows.Count, "A").End(xlUp).Row, и он должен вам помочь. Есть еще несколько способов сделать это, поэтому для записи - 5 различных способов найти последнюю строку или последний столбец с помощью VBA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...