« IE/HTAで非同期割込処理。n秒後に自動的に閉じるMsgBox() | トップページ | セキュリティレベルに依存して実行できないBookmarkletを実行する。 »

2007年10月 1日 (月)

VBAで非同期割込処理。n秒後に自動的に閉じるMsgBox()

WScript.ShellのPopUp()の秒指定は、Excelなどでは使えません。:-(

そこで、htmlfileのwindow.setTimeout()を利用した代替方法です。

Dim wShell
Dim d

Sub aaa()
Set wShell = CreateObject("WScript.Shell")
wShell.PopUp "5秒経っても自動的に閉じません。", 5, "ユニークなタイトル"
Set d = CreateObject("htmlfile")
Set d.parentWindow.opener = Me
d.parentWindow.setTimeout "opener.proc", 5000, "VBScript"
MsgBox "5秒後に自動的にとじます。", , "ユニークなタイトル"
End Sub

Sub proc()
If wShell.AppActivate("ユニークなタイトル") Then
  wShell.SendKeys "{ESC}"
  d.parentWindow.setTimeout "opener.proc", 1000, "VBScript"
End If
End Sub

VBAには関数ポインタがないので、GetRef("proc")の代わりに、
オブジェクトのMeを渡して、メソッドのprocを参照させます。

« IE/HTAで非同期割込処理。n秒後に自動的に閉じるMsgBox() | トップページ | セキュリティレベルに依存して実行できないBookmarkletを実行する。 »