Я реализовал это с помощью события Excel ProcessSelectionChange: находясь в первом столбце, запустите внешнее приложение с помощью подпрограммы Exec_TaskStartByName (см. ниже), а при переключении на другой столбец завершите его с помощью подпрограммы Exec_TaskKillByName.
Я заметил, что внешняя программа запускает структуру JAVA (представление TaskManagement), поэтому уничтожение приложения фактически означает завершение процесса Java.exe.
Таким образом, вышеописанное работает, но перезапуск приложение каждый раз занимает слишком много времени, что приводит к «мертвому времени» (инструмент еще не готов). Вместо того, чтобы каждый раз убивать/перезапускать приложение, мне интересно, можно ли приостановить запущенный процесс (выполнение временной остановки) и возобновить его, когда он вернется в первый столбец. Ожидается, что приостановка/возобновление займет меньше времени, чем уничтожение/запуск.
- Если нет, то есть ли более быстрые способы запуска внешней программы, кроме моего (см. код ниже)?
Код: Выделить всё
Function Exec_TaskStartByName( _
ByVal argFilePath As String, _
ByVal argFileName As String, _
ByRef argTaskId As Long)
'First switch to the appropriate directory before starting the command
ChDir (argFilePath)
argTaskId = Shell(argFilePath & argFileName, vbMinimizedFocus)
Exec_TaskStartByName = (argTaskId > 0)
End Function
Function Exec_TaskKillByName( _
ByVal argFileName as string)
Dim oServ As Object
Dim cProc As Variant
Dim oProc As Object
Set oServ = GetObject("winmgmts:")
Set cProc = oServ.ExecQuery("Select * from Win32_Process")
For Each oProc In cProc
If (oProc.Name = argFileName) Then
Exec_TaskKillByName = oProc.Terminate
Exit For
End If
Next
End Function
Подробнее здесь: https://stackoverflow.com/questions/788 ... -using-vba
Мобильная версия