Почему следующий код, запущенный из MS Word (основной документ MailMerge), останавливает приложение на ThisDocument.Close False
?
Нужно ли закрывать Scripting.Dictionary
каким-либо образом, кроме установки объекта на nothing
?
Существует только один активный экземпляр Word, он виден, ThisDocument
не является активным документом.Я даже явно активирую последний открытый документ, даже если он уже активен.Не уверен, что мне даже нужно установить oWorkbook
и oExcel
на nothing
.
Sub MailMergeAlternative()
Dim oExcel As Object
Dim oWorkbook As Object
Dim oFirstCell As Object
Set oExcel = CreateObject("Excel.Application")
Set oWorkbook = oExcel.workbooks.Open(SOUBOR)
Set oFirstCell = oWorkbook.sheets(SESIT).Cells(1, 1)
Dim Dict As Object
Set Dict = MakeDictionary() ' Scripting.dictionary
Dim oDoc As Object
Dim Radek As Long
Dim Radku As Long
Radku = oFirstCell.currentregion.Rows.Count
For Radek = 2 To Radku
' ... fill Dict, use MailMerge to create new document for active record ...
Set oDoc = ActiveDocument ' the new document after MailMerge
' ... insert values, save the new document, do not close it ...
Next
Closing:
oDoc.Activate ' <== set to active, not needed
Set Dict = Nothing
oWorkbook.Close
oExcel.Quit
Set oWorkbook = Nothing ' probably not needed, closed above
Set oExcel = Nothing ' probably not needed, closed above
ThisDocument.Close False ' <== Problem
End Sub
Ожидается: Код запускается, создает новый документ (ы) и закрываетсядокумент, который содержит макрос и откуда он был вызван.Последний активный документ остается открытым (только что созданный), или, если ничего не было создано, приложение Word закрывается.
Что происходит: Документ закрывается, последний активный документ остается открытым.Но Word зависает, и документ нужно найти в диспетчере задач и «вывести на передний план».Это не проблема при использовании только MailMerge (с дополнительной работой vba), и похоже, что он связан с использованием Excel и Scripting.Dictionary
.