Был предыдущий вопрос о stackoverflow:
«Можно ли запустить MAIL MERGE из макроса Excel (нажав кнопку на листе) У меня есть лист Excel с данными и я хочу экспортировать его в новое слово doc».На это ответ 29 сентября 2009 г. в 12:39 от dendarii 772.
Нам это тоже нужно, потому что мы хотели упростить жизнь добровольцам с ограниченными компьютерными навыками.
К сожалению, код Дендари, измененныйс подходящим путем, завершается с ошибкой времени выполнения 4198 в операторе .OpenDataSource.
Запись Синди Мейстер в форме Microsoft Office для формы для разработчиков> ..> Word 2010 VBA предположил, что ошибки 4198 могут быть связаны с проблемами синхронности.Я безуспешно справился с этим.
Эндрю Полсон, пишущий в Mr Excel, рекомендует участнику Снечу сравнивать свое заявление о слиянии VBA .OpenDataSource с записью макроса Word.Что думают авторы?Моя строка .OpenDataSource кажется стандартной.В моем файле источника данных Excel есть строка заголовков, за которой следуют две строки элементов данных.
У нас есть Office 2010.
Буду очень признателен за любые предложения относительно исправления 4198 и еслиКто-нибудь знает об общих диагностических процедурах.Мы два человека, работающие на благотворительную организацию.Любая помощь приветствуется!
Sub RunMerge()
Dim wd As Object
Dim wdocSource As Object
Dim strWorkbookName As String
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
Set wdocSource = wd.Documents.Open("C:\Users\george\Desktop\VBA Project\Mergeletter.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
wdocSource.Close SaveChanges:=False
Set wdocSource = Nothing
Set wd = Nothing
End Sub