[英]VBA : AppActivate not working on minimize EXE (Kill running process by process ID)
單擊Excel中的按鈕時,我有VBA代碼可以作為EXE應用程序運行。 我的代碼運行良好,但是將其最小化后將無法正常工作。 我的代碼在這里:
Sub GoToMenu()
Dim prvDir As String
On Error GoTo CallApp
'Get current directory before change
prvDir = CurDir
'Change to workbook directory
ChDrive ThisWorkbook.Path
ChDir (ThisWorkbook.Path)
'Active program via title
AppActivate ("My exe file title")
'Change back to previous directory
ChDrive prvDir
ChDir prvDir
On Error GoTo 0
Exit Sub
CallApp:
'Run MenuExcel.exe
Shell ThisWorkbook.Path + "\ExcelMenu.exe", vbNormalFocus
'Change back to previous directory
ChDrive prvDir
ChDir prvDir
End Sub
我可以解決我的問題。 我使用了“先關閉然后再打開”的概念。 我的解決方案就像下面的代碼。
Sub GoToMenu()
Dim prvDir As String
On Error GoTo CallApp
'Get current directory before change
prvDir = CurDir
'Find "ExcelMenu" process and kill it before reopen
Call CloseExcelMenu
'Change directory to workbook directory
ChDrive ThisWorkbook.Path
ChDir (ThisWorkbook.Path)
CallApp:
On Error GoTo 0
'Run ExcelMenu.exe
Shell ThisWorkbook.Path + "\ExcelMenu.exe", vbNormalFocus
'Change back to previous directory
ChDrive prvDir
ChDir prvDir
End Sub
我添加子以關閉我的exe,然后再次運行。
Sub CloseExcelMenu()
Dim strComputer As String
Dim objServices As Object, objProcessSet As Object, Process As Object
'Find running Process ID "ExcelMenu.exe"
strComputer = "."
Set objServices = GetObject("winmgmts:\\" _
& strComputer & "\root\CIMV2")
Set objProcessSet = objServices.ExecQuery _
("Select Name, ProcessID FROM Win32_Process", , 48)
'Find the process ID with Process name
For Each Process In objProcessSet
If Process.properties_("Name").Value = "ExcelMenu.exe" Then
'Script for terminate process with image name
Shell "taskkill /PID " & Process.properties_("ProcessID"), vbNormalFocus
End If
Next
Set objProcessSet = Nothing
End Sub
這些是我的參考。
查找正在運行的進程ID:
VBA獲取正在運行的進程的程序名稱和任務ID
終止進程:
VBA腳本關閉除自身以外的所有Excel實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.