Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel. / 10 сообщений из 10, страница 1 из 1
04.03.2010, 17:23
    #36503286
DMK67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
Сделал макрос , который берет значения из переменых в Excel и создает на их основе файл Word.

Все работает отлично, но если есть хоть одно открытое вордовское приложение, макрос останавливается и предлагает пересохранить файл шаблона...
Причем справка майкрософта признает что это реальный глюк офиса...

Долго думал как это обойти и родилась идея, но не хватает знаний:

Каким образом можно сделать следующее?

1. Посчитать обшее число всех открытых приложений Word
2. Закрыть все приложения принудительно через VBA из Excel
...
Рейтинг: 0 / 0
04.03.2010, 18:25
    #36503517
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
А зачем их считать?
Просто находи все открытые приложения и закрывай их. Не нашел - вышел из цикла.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub KillAllWord()
    Dim o As Object
    On Error GoTo GetObjectError
    Do While True
        Set o = GetObject(, "Word.Application")
        o.Quit
        Set o = Nothing
    Loop
NoMoreWord:
    On Error GoTo  0 
    MsgBox ("Happy now?")
    Exit Sub
    
GetObjectError:
    Debug.Print Err.Description
    Resume NoMoreWord
End Sub
...
Рейтинг: 0 / 0
04.03.2010, 21:25
    #36503830
DMK67
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
Теперь я счастлив...

А вот еще вопросик, а если таким образом пытаться закрыть все "лишние" приложения Excel из самого Excel? Получится глюк...

Как же поступить в данном случае?
...
Рейтинг: 0 / 0
04.03.2010, 21:58
    #36503871
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
Ну почему же глюк? Оно будет перебирать все открытые Эксели до тех пор пока не наткнется на самого себя, закроет само себя и все. Даже об ошибке не сообщит потому что ошибки по существу не случится.

В принципе, "самого себя" можно отловить например так:
Код: plaintext
1.
2.
3.
o=GetObjects(,"Excel.Application")
if o.HWND = Application.HWND then
    msgbox("It is me!")
end if
Но в показаный цикл это совать нет смысла, потому что сначала цикл как и предполагается убьет все ранее запущенные Эксели, но как только цикл дойдет до самого себя - все последующие вызовы GetObject() будут возвращать первый в памяти , то есть самого себя. Все Эксели который были загружены после того который выполняет этот макрос доступны уже не будут.

Можно из макроса-убийцы сделать внешний vbs и запустить его. В VBS аналогичным кодом убить все Эксели, потом открыть нужный и запустить в нем нужный макрос-единоличник.
Можно принудительно открыть новый Эксель и запустить в нем макрос-убийцу, тогда можно быть уверенным что после открытия нового Экселя и отработки макроса не запускалось больше никаких копий Экселя... ну почти уверенным.

А еще можно забыть про ActiveX и взять WinAPI, смотри функцию EnumerateWindows(). Но это уже далеко не VBA.
...
Рейтинг: 0 / 0
30.08.2010, 15:14
    #36819284
Castom
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
Здравствуйте!!! У меня ворд открывается сразу в виде режима промотра, а закрывается сначала вид режима просмотра, а потом вид режима разметки, как сделать что бы ворд закрывался сразу из вида просмотра???
...
Рейтинг: 0 / 0
30.08.2010, 18:00
    #36819744
Adanos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
А не подскажете как закрыть приложение зная его Hwnd (вообще известны все данные из Application)?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
10.11.2017, 09:45
    #39550694
Jagare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
White OwlНу почему же глюк? Оно будет перебирать все открытые Эксели до тех пор пока не наткнется на самого себя, закроет само себя и все. Даже об ошибке не сообщит потому что ошибки по существу не случится.

В принципе, "самого себя" можно отловить например так:
Код: vbnet
1.
2.
3.
4.
o=GetObjects(,"Excel.Application")
if o.HWND = Application.HWND then
    msgbox("It is me!")
end if


Но в показаный цикл это совать нет смысла, потому что сначала цикл как и предполагается убьет все ранее запущенные Эксели, но как только цикл дойдет до самого себя - все последующие вызовы GetObject() будут возвращать первый в памяти , то есть самого себя. Все Эксели который были загружены после того который выполняет этот макрос доступны уже не будут.

Можно из макроса-убийцы сделать внешний vbs и запустить его. В VBS аналогичным кодом убить все Эксели, потом открыть нужный и запустить в нем нужный макрос-единоличник.
Можно принудительно открыть новый Эксель и запустить в нем макрос-убийцу, тогда можно быть уверенным что после открытия нового Экселя и отработки макроса не запускалось больше никаких копий Экселя... ну почти уверенным.

А еще можно забыть про ActiveX и взять WinAPI, смотри функцию EnumerateWindows(). Но это уже далеко не VBA.
...
Рейтинг: 0 / 0
10.11.2017, 11:06
    #39550798
Jagare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
White OwlНу почему же глюк? Оно будет перебирать все открытые Эксели до тех пор пока не наткнется на самого себя, закроет само себя и все. Даже об ошибке не сообщит потому что ошибки по существу не случится.
Тем не менее глюк случился. Ничего не происходит, макрос просто виснет
Запускал этот макрос, основанный на вашем примере:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub KillAllExcel()
On Error GoTo GetObjectError
    Dim o As Object

    Do While True
        Set o = GetObject(, "Excel.Application")
        o.Quit
        Set o = Nothing
    Loop
NoMoreExcel:
    On Error GoTo 0
    MsgBox "Excel закрыт.", vbInformation
    Exit Sub

GetObjectError:
    Debug.Print Err.Description
    Resume NoMoreExcel
End Sub


Благодарен Вам заранее, мне бы очень помогла процедура закртия всех приложений Excel
...
Рейтинг: 0 / 0
10.11.2017, 11:12
    #39550806
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
Jagareмне бы очень помогла процедура закртия всех приложений ExcelИз Excel?
...
Рейтинг: 0 / 0
10.11.2017, 13:51
    #39550974
Jagare
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
Akina, уже получил ваш ответ, очень благодарю. Там же задал новый вопрос.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel. / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]