|
▼初心者 さん:
>▼ひつまぶし さん:
>
>回答、ありがとうございます。
>しかし、エクセルを閉じた後、マクロが起動してしまいます。
>
>ひつまぶしさんの方は、ちゃんとできたのでしょうか。
>
>申し訳ございません。
やってませんが、理屈ではうまく行くはずなんです。
提示のコードにおいては、いろいろ?と思えるところがたくさんあったのですが、
転記ミスなのだろうとタカを括ってましたが、一応確認です。
1.Sub Workbook_BeforeClose(Cancel As Boolean)は、どのモジュールに書いているのですか?
提示だとModule1(標準モジュール)に書いているとも読み取れますが、そんなことはないですよね?
2.予約した時間を覚えておく変数「予約した時間 As Date」は、どこに宣言しましたか?
Thisworkbookモジュールの宣言部にしていますか?
3.ブックモジュールだと思いますが、Workbook_OpenプロシージャとSetTimerプロシージャの間で
宣言している「Public Operated As Boolean」はそんなとこに書いてエラーになってませんか?
4.デバッグにおいては、修正したブックをマクロ起動して開いたものを修正し、
そのコードを修正保存し閉じても、すぐにはそのコードでの対応は活きませんよ。
Excel自体をQuitして、改めてテスト確認してみましたか?
5.1〜4が間違いないとして、あとはそのブックのCloseはコードから呼び出して行ったのでしょうか?
であるならば、コードでのClose命令でBeforeCloseプロシージャが呼ばれた場合には、
そこで行っているApplicationクラスのプロパティやメソッドへの命令が無視されることがあります。
Ontimeもその範疇でそのキャンセルが効かないのかもしれません。
コードでCloseしているところがあるなら、そのClose命令前でもOntimeのキャンセルをして下さい。
なお、CloseMeプロシージャは、Module1(標準モジュール)に書かれているようですが、
Thisworkbookモジュールに書いておくこともできますし、その方がメンテもしやすいのではと思います。
自分自身のCloseですので、中のコードも
Me.Close True
とできます。
但し、呼び出すときには、
Application.OnTime 予約した時間, "Thisworkbook.CloseMe"
と、モジュール名から呼び出せばいいです。
|
|