Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Excel.exe остается в памяти после завершения макро Добавлено: 11.07.06 13:34  

Автор вопроса:  SuperMaximus
Внизу приведен код процедуры, которая и висеть процесс "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 остается висеть в памяти - созданный файл слияния!

Как закрыть все, что связано с Вордовскими файлами слияния?
Спасибо!

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #1 Добавлено: 12.07.06 16:31
Не уверен, что я прав, но... всё-таки посмотри - Excel должен выгрузиться - не сразу - но через секунд несколько должен.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам