SuperMaximus
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Борюсь с проблемой висящего в памяти Excel.exe после завершения макроса, осуществляющего процедуру создания док-та MS Word путем слияния : Внизу приведен код процедуры, которая и оставляет висеть процесс "Excel.exe" в памяти после выполнения макроса 'JoinALL' (Вордовский макрос создает в ворде, в свою очередь еще один документ, который является результатом слияния).... Вызов макроса в данном примере я закомментировал, т.к. полностью вставил его тело (с соотв ссылками на WordApp) в тело экселевского макроса. Однако месторасположение макроса никоим образом не влияет на результат (excel.exe все равно продолжает висеть в памяти). Код: Sub RunContract_Automation() 'Dim Fs As Variant Dim ContractPath As String Dim WordApp As Word.Application Dim WordDoc As Word.Document Dim CType As String, CFile As String Set WordApp = CreateObject("Word.Application") Set WordDoc = WordApp.Documents.Open _ (ThisWorkbook.Path & "\" & CFile) WordApp.Visible = True ' WordApp.RUN "JoinALL" With WordApp.Application '=========Текст макроса JoinALL Вордовского файла======= .ActiveDocument.MailMerge.MainDocumentType = wdFormLetters .ActiveDocument.MailMerge.OpenDataSource name:=ActiveDocument.Path & "\WORK.xls", _ ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _ AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _ WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _ Format:=wdOpenFormatAuto, Connection:= _ "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=WORK.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=35;Je" _ , SQLStatement:="SELECT * FROM Import$`", SQLStatement1:="", SubType:= _ wdMergeSubTypeAccess .ActiveDocument.MailMerge.Destination = wdSendToNewDocument .ActiveDocument.MailMerge.SuppressBlankLines = True .ActiveDocument.MailMerge.DataSource.FirstRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord .ActiveDocument.MailMerge.DataSource.LastRecord = ActiveDocument.MailMerge.DataSource.ActiveRecord .ActiveDocument.MailMerge.Execute Pause:=False '============================================================= With .Dialogs(wdDialogFileSaveAs) .name = "D:\NEW\" & ContractName .Show End With ' .Quit SaveChanges:=wdDoNotSaveChanges End With WordApp.Quit SaveChanges:=wdDoNotSaveChanges Set WordApp = Nothing Set WordDoc = Nothing End Sub | В конце, как видно из примера кода, закрывается Вордовский док-т... WordApp.Quit SaveChanges:=wdDoNotSaveChanges Set WordApp = Nothing Set WordDoc = Nothing Однако их создается 2 (источник с полями слияния, и результат слияния - ворой документ).... Так вот если процедуру слияния в вордовском макросе (либо в вышеприведенном коде) заменить на нечто вроде MsgBox " ", то excel.exe не остается в памяти! То есть причина тому, что Excel.exe остается висеть в памяти - созданный файл слияния! Как закрыть все, что связано с Вордовскими файлами слияния? Спасибо! |