Тема: Как убить процесс Excel?

После работы макроса АКАД, который связывается с Excel, в win2000 остается висеть процесс Excel.exe.
Как его убрать?

Re: Как убить процесс Excel?

Я решил эту проблему. Только счас я на работе. А решеал я ее дома. Приду домой подскажу.

Re: Как убить процесс Excel?

СЕРГЕЙ-заранее спасибо.
Очеть выручишь. Достало убивать процесс вручную.

Re: Как убить процесс Excel?

Может проблема в том, что остались какие то указатели на объекты Excel? У меня была похожая проблема при экспорте из Лиспа в Excel - файл оставался "корявым". Когда прописал vlax-release-object за каждым объектом после того как объект далее использоваться не будет - все встало на свои места. Наверняка и в VBA что-то похожее.

Re: Как убить процесс Excel?

VK-Как бы проблема заключается в том, что не знаю, что и как прописывать. Пробовал разные варианты- на все вылетаеют ошибки.

Re: Как убить процесс Excel?

Option Explicit
Dim Ex As Object
'''''''''''''''''''''''бла бла бла ''''''''''''''''''''''''''''''''''''''
Set Ex = CreateObject("Excel.Application")
Ex.Visible = True
Ex.Workbooks.Add
''''''''''''''''''''''
For i = 1 To UBound(ReSult)
 Ex.Range("A" & i).Select
 Ex.ActiveCell.FormulaR1C1 = ReSult(i).name
' тело цикла
Next i
Ex.WindowState = xlMinimized
ActiveWorkbook.SaveAs FileName:= _
ThisDrawing.Application.ActiveDocument.name & ".xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
Ex.Quit

Может быть Ex.Quit то что тебе нужно?

Re: Как убить процесс Excel?

Приведу пару фрагментов программы из Лиспа, думаю, разберетесь в последовательности вызова методов.
Начальный фрагмент (fnd - имя Excel'евского файла, в данном случае файл имеет всего один лист)

          ;; Установить связь c Excel
          (setq oex (vlax-get-or-create-object "Excel.Application.10")) ;_ VLA-объект приложение
          (if (null oex) ;_ Если связь не установлена, то аварийно завершить работу
            (progn (alert "Не удается запустить Microsoft Excel10") (exit))
          ) ;_ if
          (vlax-put-property oex "Visible" :vlax-true) ;_ сделать Excel видимым
          (setq wkbs (vlax-get-property oex "Workbooks")) ; Указатель семейства Workbooks
          (setq awb (vlax-invoke-method wkbs "Open" fnd)) ; Открыть книгу и получить указатель книги
          (setq mainsh (vlax-get-property awb "ActiveSheet")) ; Указатель на активный лист

Далее получаем указатели на ячейки листа, работаем с ними, освобождаем указатели по мере того как объекты Excel'я больше не потребуются.
И конечный фрагмент

          (vlax-release-object mainsh) ;_ освободить указатель на лист
          (vlax-invoke-method awb "Close" :vlax-true) ; Закрыть книгу
          (vlax-release-object awb) ;_ освободить указатель на  книгу
          (vlax-release-object wkbs) ;_ освободить указатель на  семейство книг
          (vlax-invoke-method oex "Quit") ; отключиться и закрыть Excel
          (vlax-release-object oex) ;_ освободить указатель на  Excel

А в общем то, посмотрите статью Н.Полещука о COM технологии на cad.dp.ua. Главное - понять принципы управления.

Re: Как убить процесс Excel?

"Ex.Quit" не работает.
Но ошибку не выдает. Буду разбираться дальше.

Re: Как убить процесс Excel?

Для примера, который опубликовал Сергей -

set Ex = Nothing

И вообще я стараюсь всем объектным переменным по завершении их использования присвоить Nothing

Re: Как убить процесс Excel?

СПАСИБО ВСЕМ!!!
    Set Excel = Nothing
    Set ExcelWorkbook = Nothing
    Set ExcelSheet = Nothing
заработало.

Re: Как убить процесс Excel?

> VK
Вообщее Excel не всегда освобождается, даже если отрелизить все что только можно. К примеру с Word-ом таких багов нету, все идет нормально. Проверено и то и другое.
Н. Полещук сам когда-то говорил, что Excel кривоват в работе.
А я могу добавить, что он кривоват в работе из Lisp. Т.к. из Делфей я таких выкрутасов не замечал. Из VBA наверное тоже получше. А все почему - да потому что эти языки к Wind-е поближе будут.
У меня тоже Lisp-прога с Excel работает. Так я уже подумываю о том, чтобы сделать внешнюю прогу-убивалку, а то сладу нет.