powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как определить сколько запущенно копий WORD, например??
13 сообщений из 13, страница 1 из 1
Как определить сколько запущенно копий WORD, например??
    #36006530
DasTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бывает так, что запускаются несколько копий приложений.
Есть необходимость вычислить сколько копий открыто, а вернее, необходимо оставить открытую только одну копию, а остальные закрыть.

Пытають найти сколько открыто Word из VBA Excel.
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36006642
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считай процессы word.exe.
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36007384
DasTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл пример процесса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Process1()
Dim proc As System.Diagnostics.Process

proc = System.Diagnostics.Process.GetProcesses

For i =  1  To proc.Length -  1 

messagebox.Show (proc(i).ProcessName)

Next

End Sub

Но у меня ругается на:

Код: plaintext
proc As System.Diagnostics.Process   '<---- Type mismatch  

Что необходимо подключить?
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36007516
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DasTin,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Public Sub killWord()
Dim q, qq, qqq
Dim obj, objs, service, countobj, i

Set q = CreateObject("Word.Application")
Set qq = CreateObject("Word.Application")
Set qqq = CreateObject("Word.Application")

    Set service = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set objs = service.ExecQuery("SELECT * FROM Win32_Process WHERE Name='winword.exe'")
    countobj = objs.Count
    If countobj >  1  Then
        For Each obj In objs
            obj.Terminate  0 
            If countobj = i +  2  Then Exit For
            i = i +  1 
        Next
        
        MsgBox "Тут остался 1 Word, но неизвестно, какой :)))"
        
    End If

On Error Resume Next ' убиваем оставшийся Word
q.Quit  0 
qq.Quit  0 
qqq.Quit  0 
End Sub
ЗЫ Ума не приложу, занафига это может понадобиться :)
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36007913
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwrqwr, а нафига там переменные q, qq и qqq?
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36007924
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это он так насоздавал вордов для теста =)
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36007938
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тьфу ты :)
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36008783
DasTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwrqwr,

Большое спасибо! То, что нужно!

Хотя мне для общего развития хочется узнать, почему же не работает

Код: plaintext
System.Diagnostics.Process



И ещё, если кто знает. Я тут тренировался закрывать копии запущенных приложений Word, только вот второй раз Word.Application.Quit уже не работает. Второй раз GetObject(, "Word.Application")-ом уже не проверяется. В чём тут дело?


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Sub DOC()

Dim q, qq, qqq
Dim WordWasNotRunning As Boolean

Set q = CreateObject("Word.Application")
Set qq = CreateObject("Word.Application")
Set qqq = CreateObject("Word.Application")

On Error Resume Next

Set MyWD = GetObject(, "Word.Application")                 ' проверяем открыто ли приложение
    If Err.Number <>  0  Then WordWasNotRunning = True  ' если не запущено, то ИСТИНА
    Err.Clear


Do Until WordWasNotRunning = True
Set MyWD = Nothing
Set MyWD = GetObject(, "Word.Application")
    If Err.Number <>  0  Then WordWasNotRunning = True
    Err.Clear

If WordWasNotRunning = False Then
Word.Application.Quit
End if

Loop

End sub
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36008795
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: DasTin
> Хотя мне для общего развития хочется узнать, почему же не работает
> System.Diagnostics.Process

Потому, что это из NET Framework, можно и его использовать, но для этого этот фреймворк должен стоять на всех компах где
будет запускатся макрос и ещё нужно качать и поустанавливать посредника между технологиями СОМ и NET


> И ещё, если кто знает. Я тут тренировался закрывать копии запущенных приложений Word, только вот второй раз
> Word.Application.Quit уже не работает.

Не понятно, если ты имееш в виду свой пример и этот пример запускается из ворда, то ты закрываешь сам себя,

> Второй раз GetObject(, "Word.Application")-ом уже не проверяется. В чём тут дело?

Тоже не понятно, что ты имееш в виду


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36008859
DasTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

> Потому, что это из NET Framework...
Понятно, вопросов больше не имею.

> Не понятно, если ты имееш в виду свой пример и этот пример запускается из ворда, то ты
> закрываешь сам себя,

Макрос я запускаю из Excel.
А второй раз я имею в виду, что при Do Loop, при вхождении в цикл во второй раз, Word.Application.Quit не работает, равно как и GetObject(, "Word.Application"), я так понимаю, GetObject(, "Word.Application") не определяет открытые копии Word.
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36008877
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DasTinА второй раз я имею в виду, что при Do Loop, при вхождении в цикл во второй раз, Word.Application.Quit не работаетДобавь Option Explicit, узнаешь почему.
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36008904
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: DasTin
> Макрос я запускаю из Excel.
> А второй раз я имею в виду, что при Do Loop, при вхождении в цикл во второй раз, Word.Application.Quit не
> работает, равно как и GetObject(, "Word.Application"), я так понимаю, GetObject(, "Word.Application") не определяет
> открытые копии Word.

В смысле не работает, ошибку пишет или что?
я написал-бы так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub DOC()
Dim MyWD As Object ' Word.Application
Dim nAlert As Long

Set MyWD = CreateObject("Word.Application")
Set MyWD = CreateObject("Word.Application")
Set MyWD = CreateObject("Word.Application")

On Error Resume Next

Set MyWD = Nothing
Set MyWD = GetObject(, "Word.Application")
Do
    If Not MyWD Is Nothing Then
        nAlert = MyWD.DisplayAlerts
        MyWD.DisplayAlerts =  0  'wdAlertsNone
        MyWD.Quit (False)
        MyWD.DisplayAlerts = nAlert
        Set MyWD = Nothing
    End If
    Set MyWD = GetObject(, "Word.Application")
Loop Until MyWD Is Nothing

End Sub
Пока писал, понял :)
У тебя условие цикла такое


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как определить сколько запущенно копий WORD, например??
    #36009885
DasTin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,

Спасибо большое, теперь я знаю как лучше решить подобную задачу!

По поводу моего макроса, то я заменил
Код: plaintext
Word.Application.Quit

на

Код: plaintext
MyWD.Quit

И всё заработало!

Всем спасибо!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как определить сколько запущенно копий WORD, например??
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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