Меня зовут Хема, и это мой первый макрос и первое сообщение в переполнении стека.Автоматическое слияние писем с помощью Excel VBA
Я создал макрос в Excel, где я могу автоматически сбрасывать данные из Excel в Word Letter Template и сохранять отдельные файлы в папке.
У меня есть данные Employee в Excel, и я могу сгенерировать любое письмо сотрудника, используя эти данные, и сохранить индивидуальное письмо сотрудника в соответствии с именем Employee.
Я успешно выполнил автоматическое слияние и сохранил отдельные файлы в соответствии с именем Employee. И каждый раз, когда он запускает файл для одного человека, он будет предоставлять статус как уже созданного письма, чтобы он не дублировал записи Employee.
Теперь единственная проблема, с которой я столкнулся - это выход во всех объединенных файлах, выход такой же, как и в первой строке. Пример: если мой Excel имеет 5 сведений о сотрудниках, я могу сохранить 5 отдельных объединенных файлов для каждого имени сотрудника, однако объединенные данные, если у первого сотрудника, который находится только в строке 2. Во всех файлах данные отображаются для первого сотрудника строки.
Я не мог прикреплять файлы, но мои строки имеют следующие данные: Строка A: имеет S.No. Ряд B: имеет Empl Имя Ряда C: имеет Обработку Дата Ряд D: есть Адрес Ряд E: Firstname Ряд F: бизнес Название Ряд G: Показывает состояние (если письмо генерируется он показывает «Письмо Сформировано уже «после запуска макроса или он отображается пустым, если введена новая запись.
Также попросите кого-нибудь добавить код, в котором я могу сохранить вывод (объединенный файл) также в PDF, отличном от DOC-файла. быть в двух форматах один в Doc, а другой - в форматах PDF.
Большое спасибо в Advance надеемся немного послушать кого-то.
Sub MergeMe()
Dim bCreatedWordInstance As Boolean
Dim objWord As Word.Application
Dim objMMMD As Word.Document
Dim EmployeeName As String
Dim cDir As String
Dim r As Long
Dim ThisFileName As String
lastrow = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row
r = 2
For r = 2 To lastrow
If Cells(r, 7).Value = "Letter Generated Already" Then GoTo nextrow
EmployeeName = Sheets("Data").Cells(r, 2).Value
' Setup filenames
Const WTempName = "letter.docx" 'This is the 07/10 Word Templates name, Change as req'd
Dim NewFileName As String
NewFileName = "Offer Letter - " & EmployeeName & ".docx" 'This is the New 07/10 Word Documents File Name, Change as req'd"
' Setup directories
cDir = ActiveWorkbook.path + "\" 'Change if appropriate
ThisFileName = ThisWorkbook.Name
On Error Resume Next
' Create a Word Application instance
bCreatedWordInstance = False
Set objWord = GetObject(, "Word.Application")
If objWord Is Nothing Then
Err.Clear
Set objWord = CreateObject("Word.Application")
bCreatedWordInstance = True
End If
If objWord Is Nothing Then
MsgBox "Could not start Word"
Err.Clear
On Error GoTo 0
Exit Sub
End If
' Let Word trap the errors
On Error GoTo 0
' Set to True if you want to see the Word Doc flash past during construction
objWord.Visible = False
'Open Word Template
Set objMMMD = objWord.Documents.Open(cDir + WTempName)
objMMMD.Activate
'Merge the data
With objMMMD
.MailMerge.OpenDataSource Name:=cDir + ThisFileName, sqlstatement:="SELECT * FROM `Data$`" ' Set this as required
With objMMMD.MailMerge 'With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End With
' Save new file
objWord.ActiveDocument.SaveAs cDir + NewFileName
' Close the Mail Merge Main Document
objMMMD.Close savechanges:=wdDoNotSaveChanges
Set objMMMD = Nothing
' Close the New Mail Merged Document
If bCreatedWordInstance Then
objWord.Quit
End If
0:
Set objWord = Nothing
Cells(r, 7).Value = "Letter Generated Already"
nextrow:
Next r
End Sub
С уважением, Hema
Благодарим за ответ. После выполнения я понял, что могу выполнить слияние всех файлов в одном файле, но мое требование состоит в том, чтобы генерировать отдельные буквы для каждого сотрудника. Поскольку я должен предоставить индивидуальное письмо более чем 500 сотрудникам, поэтому для ввода данных в мой файл Excel и для ввода макроса все обновленные макросы будут автоматически обновляться как в PDF, так и в Doc для отдельного сотрудника , например, если я запустил макрос для 500 сотрудников, у меня должно было быть 500 отдельных файлов, объединенных только с их данными и сохранить их соответствующими именами. Пожалуйста, помогите – Hema
Hema, Ответ, который я дал, устраняет ваши проблемы. Пожалуйста, прочитайте его более внимательно. – OpiesDad
Уважаемый OpiesDad Мои извинения, как вы сказали, да, этот код работает отлично для меня, только проблема: «EmployeeName = .EmployeeName» Предполагая, что это имя поля », показывающее ошибку. Я не могу сохранить файл для каждого индивидуального имени. Пожалуйста, порекомендуйте. – Hema