Всем привет! Возникла такая проблема. Есть Excel-файл, который собирает Word-документ из разных файлов шаблонов. Т. е., в зависимости от введенных в Excel данных он выбирает титульный лист (docx-файл), сохраняет его в новом файле, открывает и вставляет в него данные. Затем выбирает файл-содержание (docx-файл) и вставляет данные в него. После чего, вставляет второй файл в первый и закрывает второй файл без сохранения. Затем выбирает файл-окончание (docx-файл) и снова вставляет его в первый файл. После чего, сохраняет получившийся файл. Все работает у меня и у коллег на немецкой Windows 10 и Office 2013. Отправил файл со всеми шаблонами в наш филиал. Русский Windows 10 и Office 2016. Некоторые файлы создаются, некоторые - нет. Ошибка возникает в момент сохранения файла-результата. Причем, при открытии файла результата, ворд открывает правильно заполненную "восстановленную копию", которую можно сохранить уже средствами Word'а. Беру шаблон файла-содержания, с которым была ошибка, переписываю его в шаблон файла-содержания, с которым ошибки не было (структура у всех файлов одинаковая), переименовываю - и все работает. То есть какие-то элементы форматирования файла-шаблона, в зависимости от версии Офисов позволяет или не позволяет макросу сохранить документ. Как такое может быть?
ПС. На всякий случай код Макроса:
Код
Sub main2(macros_date_row%)
Dim wa As Object
Dim wd1 As Object
Dim wd2 As Object
Dim wd3 As Object
Dim aTitel(10) As String
Dim aTitel_TMP(10) As String
Dim aText(23) As String
'macros_date_row% = 5
device_name$ = Sheets("Anlagen").Cells(macros_date_row%, 2).Value
firma_name$ = Sheets("Anlagen").Cells(macros_date_row%, 3).Value
bm1_num% = Sheets("Anlagen").Cells(macros_date_row%, 15).Value
file1_name$ = Sheets("Anlagen").Cells(macros_date_row%, 16).Value
bm2_num% = Sheets("Anlagen").Cells(macros_date_row%, 41).Value
file2_name$ = Sheets("Anlagen").Cells(macros_date_row%, 42).Value
file3_name$ = Sheets("Anlagen").Cells(macros_date_row%, 43).Value
bm1_name$ = Sheets("Anlagen").Cells(macros_date_row%, 44).Value
bm2_name$ = Sheets("Anlagen").Cells(macros_date_row%, 45).Value
wd_visible$ = Sheets("Main").Cells(26, 4).Value
For i = 0 To UBound(aTitel_TMP)
aTitel_TMP(i) = Sheets("Anlagen").Cells(macros_date_row%, i + 4).Text
Next i
n = 0
For j = 0 To UBound(aTitel_TMP)
If aTitel_TMP(j) <> "" Then
aTitel(n) = aTitel_TMP(j)
n = n + 1
End If
Next
For i = 0 To bm2_num% - 1
aText(i) = Sheets("Anlagen").Cells(macros_date_row%, i + 17).Text
Next i
h = Date: y$ = Year(h): m$ = Format(Month(h), "00"): d$ = Format(Day(h), "00")
t = Time(): ht$ = Format(Hour(t), "00"): mt$ = Format(Minute(t), "00"): st$ = Format(Second(t), "00")
fileRes_name$ = "\" + y$ + "-" + m$ + "-" + d$ + " Angebot. " + Split(device_name$, "/")(0) + " [" + firma_name$ + "-" + ht$ + mt$ + st$ + "].docx"
HomeDir$ = ThisWorkbook.Path
Set wa = CreateObject("Word.Application")
If wd_visible$ <> vbNullString Then wa.Visible = True
FileCopy HomeDir$ + "\Doc\" + file1_name$, HomeDir$ + fileRes_name$
FileCopy HomeDir$ + "\Doc\" + file2_name$, HomeDir$ + "\Doc\Result2.docx"
FileCopy HomeDir$ + "\Doc\" + file3_name$, HomeDir$ + "\Doc\Result3.docx"
Set wd1 = wa.Documents.Open(HomeDir$ + fileRes_name$)
For ii = 0 To bm1_num% - 1
marker = "tm_" & ii + 1
wd1.Bookmarks.Item(marker).Range.Text = aTitel(ii)
Next ii
Set wd2 = wa.Documents.Open(HomeDir$ + "\Doc\Result2.docx")
For iii = 0 To bm2_num% - 1
marker = "tm_" & iii + 1
wd2.Bookmarks.Item(marker).Range.Text = aText(iii)
Next iii
wd2.Save
wd2.Range.Copy
wd1.Bookmarks.Item(bm1_name$).Range.Paste
wd2.Close
Set wd3 = wa.Documents.Open(HomeDir$ + "\Doc\Result3.docx")
wd3.Range.Copy
wd1.Bookmarks.Item(bm2_name$).Range.Paste
wd3.Close False
wd1.Range(wd1.Range.End - 1, wd1.Range.End).Delete 1, 2
wd1.Close True
wa.Quit
Set wa = Nothing
MsgBox "Document is created."
End Sub
Ошибка Automation error возникает на строке wd1.Close True.
Add Заменил эту строчку на wd1.Save: wd1.Close - на моем компьютере срабатывает, а у коллег - Runtime error: Method 'Save' of object '_Document' failed
С кодом, вроде, всё нормально В формате DOCX должен успешно сохраняться любой контент (нет чего-то такого, что нельзя было сохранить в этом формате, но можно сохранить в другом) Вопрос лучше было бы задать на форуме по Word, - там лучше разбираются в нюансах работы с этим приложением.
Я бы попробовал выполнить все описанные действия ВРУЧНУЮ на компе в русском филиале
Если SAVE не проходит, - может, файл открыт в другой копии приложения Word, или доступен только для чтения? PS: Странное решение - несколько FileCopy Я обычно открываю шаблон, редактирую, и результат сохраняю под другим именем ( doc.SaveAs ..., doc.Close False) - и всегда все работает
Игорь написал: Если SAVE не проходит, - может, файл открыт в другой копии приложения Word, или доступен только для чтения
Спасибо за ответ. Из 98 файлов ошибка происходит на 31 файле, так что вряд ли все они по какой-то причине открываются только для чтения.
Цитата
Игорь написал: Я обычно открываю шаблон, редактирую, и результат сохраняю под другим именем
Я тоже так делаю в макросе. Строки 47 - 49.
Я проверил на Windows 7 с Word 2007 - все работает. На Windows 10 с Word 2013 - работает, a Word 2016 - ошибка. Причем вылетает системное окно с сообщением, что произошла ошибка и Word будет закрыт.
Я просто подумал, что если бы я отлаживал макрос на Word'e 2016 и получал такую ошибку... Я бы в жизни не подумал на Word-документ и искал бы причину в макросе. Так же с ума сойти можно.
это однозначно косяк самого Word ваш макрос тут не виноват можно подумать, как обойти ошибку (не допустить её появления), - но не исправить её (в коде ошибок нет)
Office 2016 - еще не очень стабильный (тут недавно пользовался Excel 2016 - он временами зависает) Пользуйтесь проверенными (более древними) версиями Office, - и проблем не будет
Не только Word в 2016 косячит. Я тут в одной компании на днях столкнулся с примерно таким же феноменом в Excel: до определенного момента все файлы обрабатываются нормально, а потом этот файл открывается по какой-то причине в скрытом режиме и работа кода невозможна. Принудительное отображение файла не спасает - сам Excel его ни в какую видеть не хочет. При этом файлы Excel выбирает по одному ему ведомому принципу...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Связались с Техподдержкой MS. Те попробовали сохранить файлы (уже без макроса - через кнопку Сохранить... и Сохранить как... и еще другими способами) - не получилось. Как решение предложили купить Office 365