2015-06-29 3 views
1

У меня есть код VBA, который будет запускаться как приложение EXE при нажатии кнопки в Excel. Мой код работает хорошо, но он не работает, когда он сведен к минимуму. Мой код:VBA: AppActivate не работает над минимизацией 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 

ответ

0

Я могу решить свой вопрос. Я использовал концепцию «Закрыть, а затем снова открыть». И мое решение вроде кода ниже.

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 

Я добавляю sub для закрытия своего exe, прежде чем запускать его снова.

И это моя рекомендация.
Найти запущенный процесс ID:
VBA Getting program names and task ID of running processes

убивать процессы:
VBA script to close every instance of Excel except itself

Смежные вопросы