Возник неприятный момент при массовом импорте данных из экселя в ворд.
Каждый раз прогоняя данные через шаблон, возникает новый процесс WINWORD.EXE, что в результате (на большом объеме: 600 файлов Excel перегоняются в Word) приводит к 100% загрузке ЦП и съеданию всего объема оперативной памяти, что в свою очередь приводит к зависанию макроса.
Дано:
1) файл эксель, в котором производятся необходимые расчеты.
2) файл шаблон ворд, в котором в необходимых местах стоят условные "zamena1" "zamena2" "zamena3", которые потом циклом построчно заменяются на данные из экселя.
В файле эксель, запускаю макрос, который в указанной папке перебирает все файлы, поочередно их открывая и перенося данные на лист с расчетами, после чего из этого же файла запускаю макрос, который формирует отчет в Word'e. Первые 100-200 файлов обрабатывает бодро, но при этом каждая итерация цикла приводит к созданию дополнительного процесса WINWORD.EXE
Прикладываю код макроса на замену данных в Word шаблоне, полагаю именно в нем проблема и он создает дополнительные процессы WORD.EXE и не выгружает их из памяти. При этом в коде объектные переменные очищаются, а файл закрывается с сохранением. Подскажите, пожалуйста, в чем может быть проблема?
| Код |
|---|
Sub Otchet()
Dim objWord As Word.Application
Dim objDocument As Word.Document
Dim iLastRow As Long
iLastRow = Worksheets(4).Cells(Rows.Count, 1).End(xlUp).Row
Set objWord = CreateObject("Word.Application")
Se t objDocument = objWord.Documents.Open(Filename:="C:\Справка\spravka.docx", ReadOnly:=False)
Set myRange = objDocument.Content
FName = "C:\Справка" & "\" & Sheets(1).Cells(8, 16).Value & "_" & Sheets(1).Cells(10, 16).Value
myRange.Find.ClearFormatting
For i = 1 To iLastRow
myRange.Find.Execute FindText:="z" & i, MatchWholeWord:=True, ReplaceWith:=Sheets(4).Cells(i, 1).Text, Replace:=wdReplaceAll
Next i
objWord.Visible = False
objDocument.SaveAs Filename:=FName & ".doc", FileFormat:=wdFormatDocument
objDocument.Close
Set myRange = Nothing
Set objDocument = Nothing
Set objWord = Nothing
End Sub
|