Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Excel VBAでSetTimer,KillTimer関数を使うとExcelが終了できない

720 views
Skip to first unread message

人工無脳

unread,
Oct 26, 2008, 4:12:04 AM10/26/08
to

環境はWindowsVista,Excel2007です。SetTimerを使ってユーザフォームを一定時間だけ表示するという簡単なプログラムを作ったところ,プログラムは問題なく動いたのですが,その後Excelを終了させようと閉じるボタンを押したところ,砂時計が出たままになり終了できなくなります。標準モジュールには下記のプログラムを作り,frmTestというフォームを表示させます。また,TestTimerProcがコールバック関数です。
Public Declare Function SetTimer Lib "user32" _
(ByVal hWnd As Long, ByRef nIDEvent As Long, _
ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" _
(ByVal hWnd As Long, ByRef nIDEvent As Long) As Long
Public ExEvent As Long
Public Sub TestTimer()
ExEvent = 10000
frmTest.Show
End Sub
Public Sub TestTimerProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByRef idEvent As Long, ByVal dwTime As Long)
Dim res As Boolean
res = KillTimer(Application.hWnd, idEvent)
If res = False Then
MsgBox "KillTimer Error"
End If
End
End Sub

frmTestのフォームモジュールは以下のもので,SetTimerを呼ぶことしかしていません。
Private Sub UserForm_Initialize()
ExEvent = SetTimer(Application.hWnd, ExEvent, 2000, AddressOf
TestTimerProc)
End Sub
原因がわかりません。どなたか,ご存知の方よろしくお願いいたします。

SETO Sohei

unread,
Oct 26, 2008, 6:13:01 PM10/26/08
to
人工無脳 <@discussions.microsoft.com> wrote in article
<9C604840-9E69-4E4E...@microsoft.com> ;
>プログラムは問題なく動いたのですが,その後Excelを終了させようと閉じるボタン
>を押したところ,砂時計が出たままになり終了できなくなります。

フォームをアンロードしていない際, しばしばこういう状況になります。
適切なタイミング(Auto_Close等)で frmTest.Unload を明示的に実行されては
いかがでしょう。

--
SETO Sohei [ PGP Key ID:0x5DF0FA4D ]
Gobo-city, Wakayama, JAPAN
mailto: s...@creamy.nax.ne.jp

人工無脳

unread,
Oct 26, 2008, 9:25:00 PM10/26/08
to
早速返信くださりありがとうございました。

> フォームをアンロードしていない際, しばしばこういう状況になります。
> 適切なタイミング(Auto_Close等)で frmTest.Unload を明示的に実行されては
> いかがでしょう。

KillTimerを出した後,すぐにUnloadするようにしたのですが,現象は変わりません
でした。Workbookは閉じることができるので,Excelの方の問題のようなのですが,分かりません。

0 new messages