Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3716 / 13644 ツリー ←次へ | 前へ→

【60476】自動エクセル終了マクロ、VBA 初心者 09/2/23(月) 16:35 質問[未読]
【60477】Re:自動エクセル終了マクロ、VBA neptune 09/2/23(月) 16:38 発言[未読]
【60478】Re:自動エクセル終了マクロ、VBA neptune 09/2/23(月) 16:40 発言[未読]
【60479】Re:自動エクセル終了マクロ、VBA 初心者 09/2/23(月) 17:06 お礼[未読]
【60480】Re:自動エクセル終了マクロ、VBA 初心者 09/2/23(月) 17:10 回答[未読]
【60483】Re:自動エクセル終了マクロ、VBA ひつまぶし 09/2/23(月) 17:51 回答[未読]
【60505】Re:自動エクセル終了マクロ、VBA 初心者 09/2/25(水) 11:17 回答[未読]
【60511】Re:自動エクセル終了マクロ、VBA ひつまぶし 09/2/25(水) 13:49 発言[未読]
【60538】Re:自動エクセル終了マクロ、VBA 初心者 09/2/26(木) 14:49 お礼[未読]
【60510】Re:自動エクセル終了マクロ、VBA SS 09/2/25(水) 13:35 発言[未読]
【60537】Re:自動エクセル終了マクロ、VBA 初心者 09/2/26(木) 13:33 お礼[未読]

【60476】自動エクセル終了マクロ、VBA
質問  初心者  - 09/2/23(月) 16:35 -

引用なし
パスワード
   エクセルを開いてから5分後にエクセルを終了させるマクロを作成しました。
5分後に強制(自動保存あり)で閉じることは可能になったんですが・・・

5分以内にエクセルを閉じる(手動で)と、アプリケーションが内部で動いているため、マクロが起動します(5分後にマクロが開き、閉じるアクションをするため)

ここまでは分かっているのですが、具体的対策ができません。
下記に私が書いたVBAを貼り付けます。

お知恵をお貸し頂けないでしょうか。お願いします。


〜ThisWorkbook〜

Private Sub Workbook_Open()
 Operated = False
 SetTimer
End Sub

Public Operated As Boolean


Sub SetTimer()
 Application.OnTime Now + TimeValue("00:05:00"), "closeme"
End Sub


〜Module1〜

Sub CloseMe()

 ActiveWorkbook.Save
 Workbooks("○○○.xls").Saved = True


 Workbooks("○○○.xls").Close False

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
  ’エクセルを閉じる前の処理
  
 Application.OnTime Now, SetTimer, schedule:=False  


End Sub

【60477】Re:自動エクセル終了マクロ、VBA
発言  neptune  - 09/2/23(月) 16:38 -

引用なし
パスワード
   ▼初心者 さん:
こんにちは

試したわけでも、経験があるわけでもないですけど。
>Sub CloseMe()
の最初に
>Application.OnTime Now, SetTimer, schedule:=False  
を持ってきたらどうでしょう?

【60478】Re:自動エクセル終了マクロ、VBA
発言  neptune  - 09/2/23(月) 16:40 -

引用なし
パスワード
   独り言、
すげっ時間間隔短か!。よっぽどタイミング良かったんやな。。

【60479】Re:自動エクセル終了マクロ、VBA
お礼  初心者  - 09/2/23(月) 17:06 -

引用なし
パスワード
   試させて頂きます。

ご回答、ありがとうございます。

【60480】Re:自動エクセル終了マクロ、VBA
回答  初心者  - 09/2/23(月) 17:10 -

引用なし
パスワード
   ▼neptune さん:
>▼初心者 さん:
>こんにちは
>
>試したわけでも、経験があるわけでもないですけど。
>>Sub CloseMe()
>の最初に
>>Application.OnTime Now, SetTimer, schedule:=False  
>を持ってきたらどうでしょう?


ムリです。
やはり、マクロは起動いたします。

これってムリなんですか?

【60483】Re:自動エクセル終了マクロ、VBA
回答  ひつまぶし  - 09/2/23(月) 17:51 -

引用なし
パスワード
   BeforeCloseで、予約をキャンセルしようとしていると思われますが、
>Private Sub Workbook_BeforeClose(Cancel As Boolean) 
>  ’エクセルを閉じる前の処理  
> Application.OnTime Now, SetTimer, schedule:=False  
>
>End Sub
これでは、予約した時間やプロシージャを正確に指定していませんよ。

いじるとすれば、
ブックモジュールで、

Private 予約した時間 As Date  
'これは、キャンセル用に予約した時間を正確に覚えておく為の変数

>Sub SetTimer()
> Application.OnTime Now + TimeValue("00:05:00"), "closeme"   ....×
  予約した時間 = Now + TimeValue("00:05:00")
 Application.OnTime 予約した時間, "closeme"
>End Sub

>Private Sub Workbook_BeforeClose(Cancel As Boolean) 
>  ’エクセルを閉じる前の処理
>  
> Application.OnTime Now, SetTimer, schedule:=False    ....×
>
  On Error Resume Next
  Application.OnTime 予約した時間, "closeme", , False
名前付き引数なら
  Application.OnTime 予約した時間, "closeme", schedule:=False
でもいいでしょう。
>End Sub

OnTimeメソッドのヘルプを確認してください。

あと、CloseMeのプロシージャの方ですが、
もし、自ブックを閉じるということなら、
その3行は、
Thisworkbook.Close True
だけで、いいような気がします。

【60505】Re:自動エクセル終了マクロ、VBA
回答  初心者  - 09/2/25(水) 11:17 -

引用なし
パスワード
   ▼ひつまぶし さん:

回答、ありがとうございます。
しかし、エクセルを閉じた後、マクロが起動してしまいます。

ひつまぶしさんの方は、ちゃんとできたのでしょうか。

申し訳ございません。

【60510】Re:自動エクセル終了マクロ、VBA
発言  SS  - 09/2/25(水) 13:35 -

引用なし
パスワード
   ▼初心者 さん:

こんにちは、興味があったのでこんなの組んでみました。
Excelを閉じる時にSetTimerEndを実行します。
要求内容満たしていますか?試してみて下さい。

Option Explicit

Public TimeS As Variant

Sub SetTimerStart()
  TimeS = Now + TimeValue("00:00:05")
  Application.OnTime TimeS, "closeme"
End Sub

Sub SetTimerEnd()
  Application.OnTime EarliestTime:=TimeS, _
    Procedure:="closeme", Schedule:=False
End Sub

Sub closeme()
  MsgBox "Now"
End Sub


>エクセルを開いてから5分後にエクセルを終了させるマクロを作成しました。
>5分後に強制(自動保存あり)で閉じることは可能になったんですが・・・
>
>5分以内にエクセルを閉じる(手動で)と、アプリケーションが内部で動いているため、マクロが起動します(5分後にマクロが開き、閉じるアクションをするため)
>
>ここまでは分かっているのですが、具体的対策ができません。
>下記に私が書いたVBAを貼り付けます。
>
>お知恵をお貸し頂けないでしょうか。お願いします。
>
>
>〜ThisWorkbook〜
>
>Private Sub Workbook_Open()
> Operated = False
> SetTimer
>End Sub
>
>Public Operated As Boolean
>
>
>Sub SetTimer()
> Application.OnTime Now + TimeValue("00:05:00"), "closeme"
>End Sub
>
>
>〜Module1〜
>
>Sub CloseMe()
>
> ActiveWorkbook.Save
> Workbooks("○○○.xls").Saved = True
>
>
> Workbooks("○○○.xls").Close False
>
>End Sub
>
>Private Sub Workbook_BeforeClose(Cancel As Boolean) 
>  ’エクセルを閉じる前の処理
>  
> Application.OnTime Now, SetTimer, schedule:=False  
>
>
>End Sub

【60511】Re:自動エクセル終了マクロ、VBA
発言  ひつまぶし  - 09/2/25(水) 13:49 -

引用なし
パスワード
   ▼初心者 さん:
>▼ひつまぶし さん:
>
>回答、ありがとうございます。
>しかし、エクセルを閉じた後、マクロが起動してしまいます。
>
>ひつまぶしさんの方は、ちゃんとできたのでしょうか。
>
>申し訳ございません。


やってませんが、理屈ではうまく行くはずなんです。

提示のコードにおいては、いろいろ?と思えるところがたくさんあったのですが、
転記ミスなのだろうとタカを括ってましたが、一応確認です。

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"
と、モジュール名から呼び出せばいいです。

【60537】Re:自動エクセル終了マクロ、VBA
お礼  初心者  - 09/2/26(木) 13:33 -

引用なし
パスワード
   ▼SS さん:

どうもありがとうございます。
SSさんが御作りなられたマクロは、不完全です。
エクセルを閉じる実行マクロが入っておりません。

ご協力ありがとうございました。

>▼初心者 さん:
>
>こんにちは、興味があったのでこんなの組んでみました。
>Excelを閉じる時にSetTimerEndを実行します。
>要求内容満たしていますか?試してみて下さい。
>
>Option Explicit
>
>Public TimeS As Variant
>
>Sub SetTimerStart()
>  TimeS = Now + TimeValue("00:00:05")
>  Application.OnTime TimeS, "closeme"
>End Sub
>
>Sub SetTimerEnd()
>  Application.OnTime EarliestTime:=TimeS, _
>    Procedure:="closeme", Schedule:=False
>End Sub
>
>Sub closeme()
>  MsgBox "Now"
>End Sub
>
>
>>エクセルを開いてから5分後にエクセルを終了させるマクロを作成しました。
>>5分後に強制(自動保存あり)で閉じることは可能になったんですが・・・
>>
>>5分以内にエクセルを閉じる(手動で)と、アプリケーションが内部で動いているため、マクロが起動します(5分後にマクロが開き、閉じるアクションをするため)
>>
>>ここまでは分かっているのですが、具体的対策ができません。
>>下記に私が書いたVBAを貼り付けます。
>>
>>お知恵をお貸し頂けないでしょうか。お願いします。
>>
>>
>>〜ThisWorkbook〜
>>
>>Private Sub Workbook_Open()
>> Operated = False
>> SetTimer
>>End Sub
>>
>>Public Operated As Boolean
>>
>>
>>Sub SetTimer()
>> Application.OnTime Now + TimeValue("00:05:00"), "closeme"
>>End Sub
>>
>>
>>〜Module1〜
>>
>>Sub CloseMe()
>>
>> ActiveWorkbook.Save
>> Workbooks("○○○.xls").Saved = True
>>
>>
>> Workbooks("○○○.xls").Close False
>>
>>End Sub
>>
>>Private Sub Workbook_BeforeClose(Cancel As Boolean) 
>>  ’エクセルを閉じる前の処理
>>  
>> Application.OnTime Now, SetTimer, schedule:=False  
>>
>>
>>End Sub

【60538】Re:自動エクセル終了マクロ、VBA
お礼  初心者  - 09/2/26(木) 14:49 -

引用なし
パスワード
   ▼ひつまぶし さん:

できました。
詳しいご説明により上記マクロが完成致しました。

誠にありがとうございます。

>▼初心者 さん:
>>▼ひつまぶし さん:
>>
>>回答、ありがとうございます。
>>しかし、エクセルを閉じた後、マクロが起動してしまいます。
>>
>>ひつまぶしさんの方は、ちゃんとできたのでしょうか。
>>
>>申し訳ございません。
>
>
>やってませんが、理屈ではうまく行くはずなんです。
>
>提示のコードにおいては、いろいろ?と思えるところがたくさんあったのですが、
>転記ミスなのだろうとタカを括ってましたが、一応確認です。
>
>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"
>と、モジュール名から呼び出せばいいです。

3716 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free