Как из VBA вызвать диалог WPF и дождаться его завершения
От: MAMOHT  
Дата: 07.10.14 11:46
Оценка:
Написал на WPF простой диалог и пытаюсь вызвать его из Excelя.
Проблемма в следующем: WPF — создает свой поток, и мне нужно как-то дождаться окончания этого потока, чтобы забрать из диалога данные.
Как это сделать?
На чистом VBA это легко делается через WaitCallback, но в Excele такой возможности нет (или я не нашел).
Как поступить?
Re: Как из VBA вызвать диалог WPF и дождаться его завершения
От: QuickWinRu Земля https://www.quickwin.ru/
Дата: 07.05.20 18:44
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>нужно как-то дождаться окончания этого потока, чтобы забрать из диалога данные.

MAM>Как это сделать?

Такой вариант пойдет?:
Option Explicit
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const cInf = &HFFFF
Public Const cPAL = &H1F0FFF
Sub GetDataFromAnExternalApp()
    Dim strExtApp As String
    Dim extAppID As Long
    Dim lngProcID As Long
    Dim retVal As Long
    strExtApp = "Z:\ExitCodeSample.exe"
    extAppID = Shell(strExtApp, vbNormalFocus)
    lngProcID = OpenProcess(cPAL, True, extAppID)
    Call WaitForSingleObject(lngProcID, cInf)
    Call GetExitCodeProcess(lngProcID, retVal)
    extAppID = CloseHandle(lngProcID)
    ActiveCell.FormulaR1C1 = retVal
End Sub
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.