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

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

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

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

1. Посчитать обшее число всех открытых приложений Word
2. Закрыть все приложения принудительно через VBA из Excel
...
Рейтинг: 0 / 0
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #36503517
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем их считать?
Просто находи все открытые приложения и закрывай их. Не нашел - вышел из цикла.
Код: 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
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #36503830
DMK67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь я счастлив...

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

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

В принципе, "самого себя" можно отловить например так:
Код: 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
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #36819284
Castom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!!! У меня ворд открывается сразу в виде режима промотра, а закрывается сначала вид режима просмотра, а потом вид режима разметки, как сделать что бы ворд закрывался сразу из вида просмотра???
...
Рейтинг: 0 / 0
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #36819744
Adanos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А не подскажете как закрыть приложение зная его Hwnd (вообще известны все данные из Application)?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #39550694
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #39550798
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #39550806
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagareмне бы очень помогла процедура закртия всех приложений ExcelИз Excel?
...
Рейтинг: 0 / 0
Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
    #39550974
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, уже получил ваш ответ, очень благодарю. Там же задал новый вопрос.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Убить Word из Excel? Закрыть все открытые приложения Word макросом из Excel.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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