Код, приведенный ниже, берет все записи и объединяет их в один объединенный почтовый документ. Я попытался изменить сам код, чтобы попытаться отправить по почте отдельные документы для каждой записи.
Однако выдается только сообщение об ошибке «Переменная объекта или переменная блока не установлена». Я подозреваю, что записи, сделанные с помощью оператора SQL, собирают все существующие записи в базе данных.
Можно ли каким-то образом только объединить почту и сохранить как отдельные документы для каждой записи?
Пример:
- Записи Записи 1 = Record1.docx
- Записи Записи 2 = Record2.docx
- Записи Записи 3 = Запись3. docx
Sub startMergeAL()
Dim oWord As Object, oWdoc As Object
Dim wdInputName As String, wdOutputName As String, outFileName As String
'Temporary variables
Dim totalRecord As Long, recordNumber As Long
'------------------------------------------------
' Set Template Path
'------------------------------------------------
wdInputName = CurrentProject.Path & "\Acceptance form V3.docx"
'------------------------------------------------
' Create unique save filename with minutes
' and seconds to prevent overwrite
'------------------------------------------------
outFileName = "Acceptance Letter - " & Format(Now(), "yyyymmddmms")
'------------------------------------------------
' Output File Path w/outFileName
'------------------------------------------------
wdOutputName = CurrentProject.Path & "\Results\" & outFileName
Set oWord = CreateObject("Word.Application")
Set oWdoc = oWord.Documents.Open(wdInputName)
'------------------------------------------------
' Start mail merge
'------------------------------------------------
With oWdoc.MailMerge
.MainDocumentType = 0 'wdFormLetters
.OpenDataSource _
Name:=CurrentProject.FullName, _
AddToRecentFiles:=False, _
LinkToSource:=True, _
Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=CurrentProject.FullName;" _
, SQLStatement:="SELECT * FROM `Acceptance_Letter`"
.Destination = 0 'wdSendToNewDocument
.Execute Pause:=False
End With
'------------------------------------------------
' Hide Word During Merge
'------------------------------------------------
oWord.Visible = False
totalRecord = DCount("*", "Acceptance_Letter")
Debug.Print ("totalRecord: " & totalRecord)
''Error
For recordNumber = 1 To totalRecord
Debug.Print ("Print: " & recordNumber)
outFileName = "Acceptance Letter - " & recordNumber
'------------------------------------------------
' Save file as Word Document
'------------------------------------------------
oWord.ActiveDocument.SaveAs2 wdOutputName & recordNumber & ".docx"
'------------------------------------------------
' Quit Word to Save Memory
'------------------------------------------------
oWord.Quit savechanges:=False
'------------------------------------------------
' Clean up memory
'------------------------------------------------
Set oWord = Nothing
Set oWdoc = Nothing
Next recordNumber
End Sub