Страницы: 1
RSS
Создание документов Word на основании таблицы Excel. Как уйти от многократного открытия шаблона?
 
Добрый день.
Помогите пожалуйста, у меня есть макрос, которым я создаю множество документов на основании данных из таблицы:
Код
Dim objWord As Object
Dim FileStart
Dim FileNew
adr = ThisWorkbook.Path
FileSt = adr & "\Шаблон.docx"
Set objWord = CreateObject("Word.Application")

n = Cells(Rows.Count, 14).End(xlUp).row
For i = 6 To n
        'Заполнение шаблона в ворд
        FileNew = adr & "\" & Cells(i, 2) & " Документ.docx"
        Set objWord = CreateObject("Word.Application")
        
        Set objDoc = objWord.Documents.Open(FileSt) 'Вот тут получается каждый раз по циклу открывается шаблон и тратиться время
        objWord.Visible = True
        
        objDoc.Bookmarks("ФИО").Range.InsertAfter Cells(i, 2) 'Вставка значения в закладку

        objWord.ActiveDocument.SaveAs _
        Filename:=FileNew, _
        FileFormat:=wdFormatDocument, _
        Password:="", _
        AddToRecentFiles:=True, _
        WritePassword:="", _
        ReadOnlyRecommended:=False
        objDoc.Close
        
        objWord.Quit
        Set objWord = Nothing
Next i

Проблема этого макроса в том, что каждый шаг в цикле у меня открывается шаблон Ворд, в него заполняются нужные значения, далее он сохраняется под определенным названием и закрывается и в следующем шаге цикла заново открывается шаблон Ворд и.т.д.

На открытие каждый раз шаблона тратиться время, можно ли как то сделать, что бы шаблон один раз отрылся, а далее на основании него создавалась бы копия документа? Пробовал метод Documents.Add, но он открывает пустой файл, а мне нужно копию.
 
Не думаю, что в Word есть метод клонирования открытого документа
(который дал бы некоторое увеличение производительности)

У вас проблема в коде в том, что вы внутри цикла каждый раз запускаете и закрываете приложение Word
А этого делать не надо. Запустили Word ДО ЦИКЛА, сделали в нём всё что надо, и закрыли приложение уже ПОСЛЕ ЦИКЛА
Думаю, это раза в два ускорит макрос.
 
Цитата
DopplerEffect написал:
На открытие каждый раз шаблона тратиться время
нет, не верно. У Вас в каждом шаге не просто открывается шаблон - у Вас Word запускается, на это и тратится большая часть времени:
Код
Set objWord = CreateObject("Word.Application")
вынесите эту строку за цикл(перед For i...), а эти строки после цикла(после Next):
Код
objWord.Quit
Set objWord = Nothing
P.S. только заметил - у Вас же есть уже строка создания Word перед циклом. Значит вторую надо удалить из тела цикла.
Изменено: Дмитрий(The_Prist) Щербаков - 05.11.2020 08:11:24
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, помогло!
Страницы: 1
Наверх