Определите, находится ли экземпляр Excel и рабочая книга в фокусе - PullRequest
1 голос
/ 14 апреля 2020

У меня подпрограмма вызывается с помощью Application.OnTime запланированного вызова.

Как определить с помощью Excel VBA, является ли книга подпрограммы целевым приложением / процессом в Windows?

( Если это не активное приложение, то я буду запускать код, который немного блокирует процесс. Если он активен, я не хочу этого делать, потому что я могу выполнять работу в книге, которую не хочу прерывать .)

1 Ответ

1 голос
/ 14 апреля 2020

Попробуйте это. Я проверил его, и он, кажется, работает.

На уровне модуля:

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

Теперь попробуйте как это:

  1. Запуск Таймер (например, из непосредственного окна).
  2. Прежде чем таймер достигнет установленной 10 секунд, переключитесь на другое приложение например, ваш браузер inte rnet. Немного подождите, пока закончится время.
  3. Посмотрите, что отображает консоль:
    • Если вы останетесь в окне Excel, на консоли отобразится «Фокус».
    • Если вы переключите окно, появится сообщение «Нет фокуса».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...