Попробуйте это. Я проверил его, и он, кажется, работает.
На уровне модуля:
Declare PtrSafe Function GetActiveWindow Lib "user32" () As Long
Для целей тестирования я написал эти 2 саба:
Sub Test()
If GetActiveWindow <> 0 Then
'Application in focus
Debug.Print "Focus"
Else
'Application not in focus
Debug.Print " No focus"
End If
End Sub
Sub Timer()
Application.OnTime Procedure:="Test", EarliestTime:=Now + TimeValue("00:00:10")
End Sub
Теперь попробуйте как это:
- Запуск Таймер (например, из непосредственного окна).
- Прежде чем таймер достигнет установленной 10 секунд, переключитесь на другое приложение например, ваш браузер inte rnet. Немного подождите, пока закончится время.
- Посмотрите, что отображает консоль:
- Если вы останетесь в окне Excel, на консоли отобразится «Фокус».
- Если вы переключите окно, появится сообщение «Нет фокуса».