VBA:AppActivate 无法最小化 EXE(按进程 ID 杀死 运行 进程)

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

我可以解决我的问题。我使用了 "Close then Re-open" 这个概念。我的解决方案如下面的代码。

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

这些是我的参考。
查找 运行ning 进程 ID:
VBA Getting program names and task ID of running processes

终止进程:
VBA script to close every instance of Excel except itself