Страницы: 1
RSS
Как определить CurrentProcess
 
Мяв!
Имеется макрос, работающий с файлами, открытыми в разных процессах.
команда
Код
xl.Quit

закрывает приложение, но в диспетчере продолжают болтаться лишние процессы.
Накропал код, который, вроде, позволяет убить лишние процессы.
Код
Sub Test()

    Dim myPrC, myProg
    Set myProg = GetObject("winmgmts:")
    Set myPrC = myProg.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'EXCEL.exe'")

    For Each x In myPrC
        Debug.Print x.Name & "    " & x.ProcessID
        ' If x.ProcessID <> 3624 Then x.Terminate
        ' If x.Name = "EXCEL.EXE" Then Stop
    Next
End Sub

Однако, остался вопрос, как определить процесс, из которого запущен макрос?
 
Цитата
RAN написал:
закрывает приложение, но в диспетчере продолжают болтаться лишние процессы
Андрей, точно? попытался симулировать - все отрабатывает нормально. Ничего лишнего после xl.Quit
По вопросам из тем форума, личку не читаю.
 
Миш, у меня висят
 
Как-то там всё не просто и зависит от версии Офиса
https://stackoverflow.com/questions/942058/how-to-get-the-process-id-of-the-current-excel-instance-through-vba-without-us

UPD чёрт его знает где именно, но где-то в ссылке решение есть. Там ещё в первом ответе ссылка на интересую статью
Может вообще достаточно
Код
'Get the process ID of this instance of Excel
Declare Function GetCurrentProcessId Lib "kernel32" () _
    As Long
Изменено: Wiss - 25.10.2019 14:14:49
Я не волшебник, я только учусь.
 
Здравствуйте, коллеги! Да, GetCurrentProcessId. Только в наше время, разумеется, так:
Код
#If VBA7 Then
  Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As Long
#Else
  Declare Function GetCurrentProcessId Lib "kernel32" () As Long
#End If
На всякий случай, проверил для Excel по Диспетчеру задач. :)  
Изменено: sokol92 - 25.10.2019 14:26:37
Владимир
 
Спасибо, это оно самое.
Страницы: 1
Наверх