VBA:AppActivate不使用最小化EXE(按进程ID终止正在运行的进程)
当在Excel中单击按钮时,我有VBA代码作为EXE应用程序运行。我的代码工作得很好,但最小化后就不起作用了。 我的代码在这里:VBA:AppActivate不使用最小化EXE(按进程ID终止正在运行的进程),vba,excel,excel-2010,Vba,Excel,Excel 2010,当在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 ThisWorkbo
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:
终止进程:
我能解决我的问题。我使用了“关闭然后重新打开”的概念。我的解决方案如下所示
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:
终止进程: