Я думаю, что самый простой способ - использовать WinAPI для проверки названия текущего окна.Попробуйте это:
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal HWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Sub Test()
WaitForWindow "Notepad"
Debug.Print "Notepad is opened"
End Sub
Sub WaitForWindow(Title As String)
Dim TopWindow As String
Do
DoEvents
TopWindow = WindowTitle
Application.Wait Now + TimeValue("0:00:01")
Loop Until InStr(1, TopWindow, WindowTitle, vbTextCompare) > 0
End Sub
Function WindowTitle()
Dim WinText As String
Dim HWnd As Long
Dim L As Long
HWnd = GetForegroundWindow()
WinText = String(255, vbNullChar)
L = GetWindowText(HWnd, WinText, 255)
WindowTitle = Left(WinText, InStr(1, WinText, vbNullChar) - 1)
End Function
Когда вы запустите метод Test, он будет ожидать чего-то с Notepad в заголовке.Вместо этого поместите заголовок диалога в вызов.