Тема: Надо добиться закрытия Excel для продолжения работы макроса

В скрипте после Module_1.ExecuteReport автоматически открывается отчёт (Excel) и его сохраняю

Set EDoc1 = GetObject(,"Excel.Application") 
EDoC1.ActiveWorkbook.SaveAs file_name 
EDoC1.Quit
Set  EDoc1 = Nothing  

Надо предварительно выполнить проверку

' Проверка, открыт ли Excel, до тех пор, пока его не закроют
    Set  EDoc1 = Nothing  
    Set EDoc1 = GetObject(,"Excel.Application") 
    Do While Not EDoc1= Empty 'Nothing
       Call TCSApp.ShowMessageBox("Excel запущен!","Закройте Excel!")
       Set EDoc1 = Nothing  
       Set EDoc1 = GetObject(,"Excel.Application")   
    Loop
    Call TCSApp.ShowMessageBox("Excel не запущен!","Можно продолжать. ОК")      
    Set  EDoc1 = Nothing  

Когда нет открытого Excel, на GetObject(,"Excel.Application")  выдаётся ошибка.
Посоветуйте, как в скрипте, желательно не обрабатывая ошибку (ERR), определить, что нет открытого Excel.

Re: Надо добиться закрытия Excel для продолжения работы макроса

Может лучше сохранять эксель из самого экселя, для чего встроить макрос в шаблон отчета?

Re: Надо добиться закрытия Excel для продолжения работы макроса

Ошибку обработать не проблема  https://forum.technologics.ru/post7829.html#p7829 только во толку то. Правильнее это конечно писать в Excel, так как GetObject вернет вам некий активный объект, а какой - неизвестно.

Re: Надо добиться закрытия Excel для продолжения работы макроса

Спасибо за советы. Пока нет готовности вмешиваться в шаблон отчёта из-за малого опыта (хотя хотелось бы).
Проверку, запущен ли др. Excel, обеспечила, обрабатывая ошибку. Но есть одно НО, которое мне не нравится.
Закончив обработку ошибок в скрипта, не могу её (обработку ошибок)  остановить, т.к. On Error goto 0  в скрипте не работает. Меня настораживает, вдруг после не отловится другая ошибка.
Или Вы рекомендуете обрабатывать ошибки не в скрипте, а , например, в VB.

(изменено: Елена Кузнецова, 30 марта 2011 14:41:54)

Re: Надо добиться закрытия Excel для продолжения работы макроса

Опишите, пожалуйста, конкретнее, что вы хотите из всего этого получить?
Куа именно сохранить файл экселя? Просто на диск, или вы пытаетесь его положить в файловый состав документа какого-то?
Я могу попробовать поискать вам конкретный пример. Есть несколько вариантов реализации, какой именно вам подойдет, надо понять.

Re: Надо добиться закрытия Excel для продолжения работы макроса

Елена, после формирования отчёта я сохраняю (открытый) файл .xls на диске и затем кладу его в файловый состав документа архива. Скрипт работает, но буду Вам признательна, если покажете примеры. Есть большое желание учиться.

Re: Надо добиться закрытия Excel для продолжения работы макроса

Ошибку обрабатываю следующим образом.

' Проверка, открыт ли Excel, до тех пор, пока его не закроют
Set  EDoc1 = Nothing 
On Error resume Next
Set EDoc1 = GetObject(,"Excel.Application")      
If Err.number=429 Then
   Call TCSApp.ShowMessageBox("Excel не запущен!","Можно продолжать. ОК")      
   Err.Clear ' очищаем информацию об ошибке 
   Set  EDoc1 = Nothing 
Else
   Do While Not EDoc1= Nothing 'Empty 'Nothing
       Call TCSApp.ShowMessageBox("Excel запущен!","Закройте Excel!")
       Set EDoc1 = Nothing  
       Set EDoc1 = GetObject(,"Excel.Application")   
       If Err.number=429 Then
            Call TCSApp.ShowMessageBox("Excel закрыт!","Можно продолжать. ОК")      
            Err.Clear ' очищаем информацию об ошибке
            Exit do
       End If                      
   Loop
   Call TCSApp.ShowMessageBox("Excel не запущен!","Можно продолжать. ОК")      
   Set  EDoc1 = Nothing  
End If                      

Можно ли после этого кода отменить обработку ошибок,  а то On Error resume Next так и будет действовать.

(изменено: Дмитрий Гамий, 4 апреля 2011 14:39:37)

Re: Надо добиться закрытия Excel для продолжения работы макроса

Обычно отменяется так:

On Error GoTo 0
Спасибо сказали: snake1

Re: Надо добиться закрытия Excel для продолжения работы макроса

Почему-то у нас сложилось убеждение, что On Error goto 0  в скрипте не работает. Думали, приводимые примеры  - для VB, а не VBScript. Сейчас перепроверила и обнаружила своё заблуждение. В скрипте тоже работает. Пребываю в недоумении. В то же время очень рада, что подтолкнули разобраться и снять проблему. Спасибо

Re: Надо добиться закрытия Excel для продолжения работы макроса

Там даже классы есть :)

Вообще в хелпе и на форуме по большей части (если не оговорено пользователем) примеры даются на VBScript, чтобы в TechnologiCS можно было сразу запустить.

Re: Надо добиться закрытия Excel для продолжения работы макроса

Ok :)