2013-07-15 7 views
0

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

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 Имя файла: = Данные, SQLStatement: = "SELECT * FROM [Лист1 $]"

'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 

End Sub

ответ

0

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

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

тогда выполнить слияние с помощью

WordDoc.MailMerge.Execute 

и если вы объединяете к новый документ, выход, как правило, станет ActiveDocument.

Вам не нужно это для слияния ...

Sheets("Sheet1").Select 
+0

Sub OpenDocFileNewName() – MelindaNC

+0

Set WordApp = CreateObject ("Word.Application.8") Установить WordDoc = WordApp.Documents.Open ("C: \ Users \ mmezzolesta \ Document s \ _TestDataMerge \ STANDARD.docx ") WordApp.Visible = TrueData =" C: \ Users \ mmezzolesta \ Documents \ _TestDataMerge \ test_table.xlsm " WordDoc.MailMerge.OpenDataSource Имя файла: = Данные, SQLStatement: =" SELECT * FROM [Sheet1 $] " WordDoc.MailMerge.ExecuteWordMailMerge.Application.ActiveDocument.SaveAs Имя файла: = (" C: \ Users \ mmezzolesta \ Documents \ _TestMailMergeAuto ") &"/"& Range (" A2 ") &" Стандартное заземление - "& Range (" e2 "). Текст WordApp.ActiveDocument.Close WordApp.Quit – MelindaNC

+0

Привет, Bibadiak, я изменил строку текста на WordDoc.MailMerge.OpenDataSource Имя файла: = Данные, SQLStatement: =" SELECT * FROM [ Sheet1 $] "и до сих пор отлаживать эту строку. Я оставлял слишком много пробелов или использовал неправильные символы? – MelindaNC

0

еще есть немного проблемы с Select Table. Когда я запускаю макрос, появляется окно «Выбор таблицы», и я должен сказать «ОК», хотя в файле 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 

End Sub '

Смежные вопросы