これが私がやったことです。私はこの投稿からかなり借りました:Excelで定期的に実行されるマクロを作成するにはどうすればよいですか?
ユーザーがハイパーリンクをクリックすると、コードはExcelがアクティブウィンドウであるかどうかを定期的にチェックし始めます。GetActiveWindow関数は、ユーザーがExcelアプリケーションを使用していない場合はゼロを返し、使用している場合は正の数を返すことがわかりました。コードがユーザーが別のウィンドウからExcelに戻ったことを検出した場合(前のチェックでユーザーが別のウィンドウにあり、現在のチェックでExcelにあることが検出された場合)、テーブルが更新され、タイマーはアクティブなウィンドウのチェックを停止します。
このようにすることには、どのWebブラウザでも機能するという利点があります。
Option Explicit
Dim ExcelIsActive As Boolean
Private Declare Function GetActiveWindow Lib "user32" () As Long
Dim m_dtNextTime As Date
Dim m_dtInterval As Date
Dim DisableFlag As Boolean
Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
Call start
End Sub
Public Sub Enable(Interval As Date)
Call Disable
m_dtInterval = Interval
Call starttimer
End Sub
Private Sub starttimer()
m_dtNextTime = Now + m_dtInterval
Application.OnTime m_dtNextTime, "TestActive"
End Sub
Public Sub TestActive()
If GetActiveWindow > 0 Then
If ExcelIsActive = False Then
ExcelIsActive = True
Call RefreshQuery
End If
Else
ExcelIsActive = False
End If
If Not DisableFlag Then
Call starttimer
Else
Call Disable
End If
End Sub
Public Sub Disable()
Dim dtZero As Date
If m_dtNextTime <> dtZero Then
' Stop timer if it is running
On Error Resume Next
Application.OnTime m_dtNextTime, "TestActive", , False
On Error GoTo 0
m_dtNextTime = dtZero
End If
m_dtInterval = dtZero
End Sub
Sub start()
'Start the timer
DisableFlag = False
ExcelIsActive = True
'Sets the interval to be three seconds
Call Enable(#12:00:03 AM#)
End Sub
Public Sub RefreshQuery()
'I do my stuff here
'Stop the timer until the next time the user launches the browser
DisableFlag = True
End Sub