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
Excel.exe остается в памяти после завершения макроса
в памяти после выполнения макроса 'JoinALL' (Вордовский макрос создает в ворде, в свою очередь еще один документ, который является результатом слияния)....
Вызов макроса в данном примере я закомментировал, т.к. полностью вставил его тело (с соотв ссылками на WordApp) в тело экселевского макроса. Однако месторасположение макроса никоим образом не влияет на результат (excel.exe все равно продолжает висеть в памяти).
Код:
В конце, как видно из примера кода, закрывается Вордовский док-т...
WordApp.Quit SaveChanges:=wdDoNotSaveChanges
Set WordApp = Nothing
Set WordDoc = Nothing
Однако их создается 2 (источник с полями слияния, и результат слияния - ворой документ).... Так вот если процедуру слияния в вордовском макросе (либо в вышеприведенном коде) заменить на нечто вроде MsgBox " :)", то excel.exe не остается в памяти!
То есть причина тому, что Excel.exe остается висеть в памяти - созданный файл слияния!
Как закрыть все, что связано с Вордовскими файлами слияния?
Спасибо!
[/QUOTE]
Я ничего не шарю в макросах но судя по твоим словам, excel висит в памяти из-за макроса, а точнее из-за того, что етот макрос не завершаеться сам-по себе, его надо завершить. Ведь как извесно макрос ето что-то вроде тегов на базике, а их надо интерпритировать, и наверное, я так думаю, ету работу производит excel. Но по скольку, как я више говорил, не шарю я в макросах, то ето завершить его надо тебе самому. Помни: лучшее средство от всяческих excel'ев - Ctrl+Alt+Del и етим все сказано :-). И еще, из любой ситуации есть выход. Удачи!
Dim ExcelProcesses() As Process = Process.GetProcessesByName("EXCEL")
Dim ExcelProcess As Process = Nothing
For Each ExcelProcess In ExcelProcesses
ExcelProcess.Kill()
Next
Убивает все бегущие на компе процессы EXCEL