Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Сохранение и закрытие файла Word из Excel

Автор Dmitry_Cheplya, 10.03.2026, 09:39:21

« назад - далее »

Dmitry_Cheplya

Добрый день!
Есть следующая задача. В Excel таблица с данными, которые нужно по закладкам вносить в шаблонный Word-файл. Открыть файл и внести в него изменения - благополучно закрытый вопрос, все работает. Даже сохранить файл с новым именем по правильному пути (выбор пути через стандартное диалоговое окно) удалось реализовать, но закрыть отредактированный файл с использованием имени файла в команде на на закрытие не получается.
myDocument.SaveAs2 (mypath & "\" & "Паспорт " & "Опоры.docx")
Documents("Паспорт " & "Опоры.docx").Close SaveChanges:=wdSaveChanges

Код немного упростил код в части имени файла
Не могу понять, почему не закрывает файл с указанным именем

Дмитрий Щербаков(The_Prist)

#1
Цитата: Dmitry_Cheplya от 10.03.2026, 09:39:21Documents("Паспорт " & "Опоры.docx").Close SaveChanges:=wdSaveChanges
Вероятно, где-то в коде стоит директива пропуска ошибок On Error Resume next. И строка, которую я в цитате выделил пропускается. Почему? потому что в Excel нет коллекции Documents. Надо обращаться через переменную, которая была создана при помощи CreateObject("Word.Application"). Или через New Word.Application - не могу сказать, т.к. кода нет. Тоже самое относится к wdSaveChanges - Excel не знает такой константы.
Вот здесь я расписывал эту проблему: Как из Excel обратиться к другому приложению - Главная ошибка новичка
Но я бы рекомендовал всю статью прочитать - не лишним будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Dmitry_Cheplya

#2
Цитата: Дмитрий Щербаков(The_Prist) от 10.03.2026, 14:50:59Вероятно, где-то в коде стоит директива пропуска ошибок On Error Resume next. И строка, которую я в цитате выделил пропускается.
В программе такой директивы (пропуска ошибки) нет. А за ссылку - спасибо!

Dmitry_Cheplya

Мало ли кому-то будет интересно, чем закончилось и какой вариант рабочий
Set myWord = CreateObject("Word.Application")
....
myWord.Documents("Паспорт " & "Опоры.docx").Close SaveChanges:=wdSaveChanges
При таком варианте файл благополучно закрылся, но само приложение Word осталось открытым. Его закрывать нужно в случае необходимости отдельной командой {переменная с объектом "Word.Application"}.Quit

Дмитрий Щербаков(The_Prist)

А у Вас переменная wdSaveChanges объявлена в коде? Если нет - то она равна 0, что для метода Close будет равносильно False. В Вашем случае, полагаю, это неважно - т.к. прямо перед этим идет SaveAs. Но на будущее учитывайте это.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Яндекс.Метрика Рейтинг@Mail.ru