Макрос слияния почты

Я просмотрел рекомендации по работе с MailMerge с макросом. Меня просто нужно подтолкнуть в правильном направлении. Прежде чем я начал работать над аспектом MailMerge, я заставил макрос открыть текстовый файл (docx), а затем сохранить его под новым именем, используя введенную информацию о проекте листа 1 Excel. Я запускаю макрос из исходного документа, поэтому не знаю, связана ли это с vba. Я получаю его, чтобы открыть файл Word, но он спрашивает меня, в порядке ли лист 1 (исходный файл). Спасибо за любую помощь или направление, которое вы можете дать

Sub OpenDocFileNewName () 'Макрос OpenDocFileNewName'

Set WordApp = CreateObject("Word.Application.8")

Set WordDoc = WordApp.Documents.Open("C:\Users\mmezzolesta\Documents\_TestDataMerge\STANDARD.docx")

WordApp.Visible = True

'
'mail merge
'

Data = "C:\Users\mmezzolesta\Documents\_TestDataMerge\test_table.xlsm"

' WordDoc.MailMerge.OpenDataSource (Data)

WordDoc.MailMerge.OpenDataSource Имя файла: = Data, SQLStatement: = "ВЫБРАТЬ * ИЗ [Sheet1 $]"

'Sheets("Sheet1").Select

WordMailMerge.Application.ActiveDocument.SaveAs Filename:=("C:\Users\mmezzolesta\Documents\_TestMailMergeAuto") & "/" & Range("A2") & "Standard-Grounding-" & Range("e2").Text

WordApp.ActiveDocument.Close

WordApp.Quit

Конец подписки


person MelindaNC    schedule 15.07.2013    source источник


Ответы (2)


Главное, что вам нужно в последних версиях Word (которые по умолчанию используют OLE DB для подключения):

WordDoc.MailMerge.OpenDataSource Filename:=Data, _
SQLStatement:="SELECT * FROM [Sheet1$]"

затем вы выполняете слияние, используя

WordDoc.MailMerge.Execute

а если вы выполняете слияние с новым документом, результатом обычно становится ActiveDocument.

Вам это не понадобится для слияния ...

Sheets("Sheet1").Select
person Community    schedule 16.07.2013
comment
Sub OpenDocFileNewName () - person MelindaNC; 16.07.2013
comment
Установите WordApp = CreateObject (Word.Application.8) Установите WordDoc = WordApp.Documents.Open (C: \ Users \ mmezzolesta \ Documents_TestDataMerge \ STANDARD.docx) WordApp.Visible = TrueData = C: \ Users \ mmezzolesta \ Documents_TestDataMerge \ test_TestDataMerge. xlsm WordDoc.MailMerge.OpenDataSource Имя файла: = Data, SQLStatement: = SELECT * FROM [Sheet1 $] WordDoc.MailMerge.ExecuteWordMailMerge.Application.ActiveDocument.SaveAs Имя файла: = (C: \ Users \ mmezzolesta / Documents_Test )Mail A2) & Standard-Grounding- & Range (e2) .Text WordApp.ActiveDocument.Close WordApp.Quit - person MelindaNC; 16.07.2013
comment
Привет, Бибадьяк, я изменил строку текста на WordDoc.MailMerge.OpenDataSource Имя файла: = Data, SQLStatement: = SELECT * FROM [Sheet1 $] и все еще останавливаю отладку на этой строке. Я оставил слишком много пробелов или использовал неправильные символы? - person MelindaNC; 16.07.2013
comment
Здесь работает нормально с Word 2010, но я предполагаю, что ваш лист на самом деле называется Sheet1. (Мне было интересно, может ли использование зарезервированного слова Data вызвать проблему - похоже, это не так, но, возможно, было бы лучше дать вашей переменной другое имя). Можете ли вы подключиться к источнику данных вручную? - person ; 18.07.2013

по-прежнему возникают проблемы с таблицей выбора. Когда я запускаю макрос, появляется всплывающее окно «Выбрать таблицу», и я должен сказать «ОК», даже если в файле Excel только один лист. Исходный документ Word не закроется, пока я не нажму кнопку «Сохранить». Есть ли простой способ автоматизировать это в vba?

Обновленный код

Sub OpenDocFileNewName () 'Макрос OpenDocFileNewName'

Set WordApp = CreateObject("Word.Application.8")

Set WordDoc = WordApp.Documents.Open("C:\Users\mmezzolesta\Documents\_TestDataMerge\STANDARD.docx")

WordApp.Visible = True

'
'mail merge
'

Data = "C:\Users\mmezzolesta\Documents\_TestDataMerge\test_table.xlsm"

WordDoc.MailMerge.OpenDataSource (Data)

WordDoc.MailMerge.Execute

'
'Sheets("Sheet1").Select

WordApp.ActiveDocument.SaveAs Filename:=("C:\Users\mmezzolesta\Documents\_TestMailMergeAuto") & "/" & Range("A2") & "Standard-Grounding-" & Range("e2").Text

WordApp.ActiveDocument.Close

WordApp.Quit

Конец подписки '

person MelindaNC    schedule 17.07.2013