[[20161123183326]] 『エラーが出てしまい、困っています。どなたか教え』(タジタジ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エラーが出てしまい、困っています。どなたか教えてください。』(タジタジ)

ブックを開いて15秒後に、指定のマクロを走らせます。
その後、10分おきに最初に指定したマクロを10回走らせるということがしたくて。
ただ、途中でブックを閉じる時があるので、その際は、指定マクロが開かないようにし、ブックを閉じたいです。しかし、閉じようとすると、エラーが出てしまいます。
(下記のようなエラーメッセージ)

 ’On Time'メソッドは失敗しました Application オブジェクト

どこが間違っているのか教えてください。お願いします。

Private Sub Workbook_Open()

Application.ScreenUpdating = False

Sheet("計画").Select

Sheet("計画").Activate

Sheet("計画").Range("A1") = 0

mytime = now + TimeValue("00::00:15")

Application.OnTime mytime, "動作"

Application.ScreenUpdating = True

End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.OnTime mytime, "動作", , False

End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−

Public mytime As Date

Sub 動作()

Sheets("計画").Range("A1").Value = Sheets("計画").Range("A1").Value + 1

動作内容がある

If Sheets(計画").Range("A1") < 10 Then

mytime = Now + TimeValue(00:10:00)

Application.OnTime mytime, "動作"

End if

End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−

< 使用 Excel:Excel2007、使用 OS:Windows7 >


コードを手打ちせずに、コピーペイストして下さい。
コンパイルエラーがでるようなものを分析するのは御免です。

(γ) 2016/11/23(水) 21:35


 γさんの指摘の通りです。

 そもそも、手打ちするより、実際のコードをコピペして貼り付けるほうが簡単ではないですか?

 ところで、ブックを閉じようとしてエラーになる、その時の 計画シートの A1 の値を確認すれば
 なにが問題か、自分で発見できるかもしれませんよ。

(β) 2016/11/23(水) 22:31


現象面から想像すれば、予約してないのに取り消ししようとした、
ということでしょう。コードが正しいとして。

コード作成後に、いったん閉じようとしているとか(予約はされていない)。
所定回数に達したあとで、予約がない状態でとじようとした、とか。
(βさんすみません。)

Before_Closeのコードの中で、
On Error Resume Next を使うのでしょうかね。

(γ) 2016/11/23(水) 23:06


γさん、返信ありがとうございます。
確かに間違いだらけで、すみませんでした。

先ほど、見直してみたら動作できたのですが、なんか腑に落ちなくて。
どこがダメだと、’On Time'メソッドは失敗しました Application オブジェクト
エラーがでるのですか?
下記は、うまく動いたものです。

Private Sub Workbook_Open()

    Application.ScreenUpdating = False

Sheets("計画").Select

Sheets("計画").Activate

Sheets("計画").Range("A1") = 0

mytime = Now + TimeValue("00:00:15")

Application.OnTime mytime, "動作"

Application.ScreenUpdating = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.OnTime mytime, "動作", , False

ActiveWorkbook.Save

End Sub

Public mytime As Date

Sub 動作()

Sheets("計画").Range("A1").Value = Sheets("計画").Range("A1").Value + 1

Sheets("計画").Select

If Sheets("計画").Range("A1") < 10 Then

mytime = Now + TimeValue("00:00:15")

Application.OnTime mytime, "動作"

End If

End Sub
(タジタジ) 2016/11/23(水) 23:33


 いやぁ・・・

 ActiveWorkbook.Save  これは、あまり意味がないというか、必要なら、それはそれでいいのですが
 OnTimeエラーには関係のないコードです。

 そうではなく、私もコメントしたつもりですし、γさん指摘の

 >>所定回数に達したあとで、予約がない状態でとじようとした、とか。

 このあたりは確認しましたか?

(β) 2016/11/24(木) 00:43


既に答えは出ているのですが、も少し説明を。

今のロジックは、15秒毎に動作し、10回繰り返していますね。セルに10を入れた後は、もう繰り返しません。
closeの際、既に10回繰り返した後であれば、もう次のOnTimeは登録されていないので、停止しようとすると、そんな登録は無い、ということでエラーになる訳です。 10回繰り返す前にcloseした場合のみ、OnTimeの停止要求が受け付けられて、正常終了してますね。

修正方法1:停止前に、停止する対象が存在するのか確認する
修正方法2:常に停止して、もしエラーになっても無視する
(???) 2016/11/24(木) 12:00


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.