- ベストアンサー
エクセルVBAにおけるON TIMEメソッドの解除方法について
こんにちは。現在エクセルでフォームを使用したVBAマクロを作成中です。 内容はフォーム内のテキストボックスに制限時間を設けて文字入力を行ってもらうものです。 Sub テスト() do until ・ ・ call timeup loop End Sub Sub timeup() dim timekp as integer 'テストの開始時間をキープ 'Application.OnTime timekp + TimeValue("1:00:00"),"endform" '1時間経過後終了を促すフォームを表示する End Sub Sub endform() load userform1 userform1.show 'エクセル終了のコマンドボタンがついているフォームを表示する End Sub マクロは大まかに記述しましたが以上のようにすると、一度はマクロの作成が成功したように終了するのですが、ブックを開けたままでいると1時間後に自動的にuserform1が表示されてしまいます。また、ブックを閉じていても自動的にオープンし、(マクロを有効にする)をONにするとデバック状態となります。 変数のtimekpを初期化する事で凌げると思ったのですが、うまくいきません。 以前マクロのヘルプを操作している時にON TIMEメソッドを解除する方法が掲載されていたように思うのですが、探し方がマズイのか見つけられませんでした。 マクロの記述方法がマズイのでしょうか?ON TIMEメソッドを解除しない限り、いつまでもこのメソッドは効力を発揮するのでしょうか? また、ON TIMEメソッドを解除できるメソッドや良い解決方法がありましたら入門書等を片手にマクロを作成している素人にご教授の程お願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>ON TIMEメソッドを解除 OnTimeのヘルプはごらんになられましたか? expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) の Schedule にfalseを設定することで、直前の実行指定を解除することができます。 具体的には Application.OnTime timekp + TimeValue("1:00:00"),"endform",,false とでもすればいいです。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 do until ・ ・ call timeup loop このようにLoopしたら、何度も、行うのではないでしょうか? expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) Schedule :=False にするのは、実行前の中途キャンセルのはずですから、今回の場合は、一体、いくつ設定されているのか見当がつきませんが、少なくとも、Loop で、設定しているところを見直さないとダメだと思います。
お礼
Loopの設定を見直して、皆さんのおっしゃる通りFalseを設定したものを作成すると成功しました。本当に有難うございました。
- Musaffah
- ベストアンサー率36% (37/101)
OnTimeメソッドを使ったことないので自信がありませんが・・・。 OnTimeメソッドの4つ目の引数を「Schedule:=False」にすると、直前のプロシージャの設定を解除するみたいですよ?
お礼
自信がないなんて、とんでもない。回答通り実行したところ、うまくいきました。本当に有難うございました。
お礼
On Timeのヘルプの使用例に説明が記載されていました。 ヘルプはチェックしていたのですが専門用語が多く、省略可と記載されている部分はツイ読み飛ばしてしまうのです。時にはヘルプのヘルプが欲しいくらいです。 今日早速実行したところ成功しました。本当に有難うございました。