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

Пытають найти сколько открыто Word из VBA Excel.
...
Рейтинг: 0 / 0
25.05.2009, 21:56
    #36006642
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
Считай процессы word.exe.
...
Рейтинг: 0 / 0
26.05.2009, 11:19
    #36007384
DasTin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
Нашёл пример процесса:
Код: 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
26.05.2009, 12:03
    #36007516
qwrqwr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
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
26.05.2009, 13:49
    #36007913
Krasnaja Shapka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
qwrqwr, а нафига там переменные q, qq и qqq?
...
Рейтинг: 0 / 0
26.05.2009, 13:54
    #36007924
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
это он так насоздавал вордов для теста =)
...
Рейтинг: 0 / 0
26.05.2009, 13:56
    #36007938
Krasnaja Shapka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
тьфу ты :)
...
Рейтинг: 0 / 0
26.05.2009, 17:57
    #36008783
DasTin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
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
26.05.2009, 18:03
    #36008795
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить сколько запущенно копий WORD, например??
> Автор: DasTin
> Хотя мне для общего развития хочется узнать, почему же не работает
> System.Diagnostics.Process

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


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

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

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

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


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

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

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

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

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

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

на

Код: plaintext
MyWD.Quit

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

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


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