プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。現在エクセルでフォームを使用した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メソッドを解除できるメソッドや良い解決方法がありましたら入門書等を片手にマクロを作成している素人にご教授の程お願い致します。

A 回答 (3件)

>ON TIMEメソッドを解除


OnTimeのヘルプはごらんになられましたか?
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

Schedule にfalseを設定することで、直前の実行指定を解除することができます。
具体的には
Application.OnTime timekp + TimeValue("1:00:00"),"endform",,false
とでもすればいいです。
    • good
    • 0
この回答へのお礼

On Timeのヘルプの使用例に説明が記載されていました。
ヘルプはチェックしていたのですが専門用語が多く、省略可と記載されている部分はツイ読み飛ばしてしまうのです。時にはヘルプのヘルプが欲しいくらいです。
今日早速実行したところ成功しました。本当に有難うございました。

お礼日時:2005/08/22 18:24

こんにちは。



do until
 ・
 ・
call timeup
loop

このようにLoopしたら、何度も、行うのではないでしょうか?

expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

Schedule :=False にするのは、実行前の中途キャンセルのはずですから、今回の場合は、一体、いくつ設定されているのか見当がつきませんが、少なくとも、Loop で、設定しているところを見直さないとダメだと思います。
    • good
    • 0
この回答へのお礼

Loopの設定を見直して、皆さんのおっしゃる通りFalseを設定したものを作成すると成功しました。本当に有難うございました。

お礼日時:2005/08/22 18:35

OnTimeメソッドを使ったことないので自信がありませんが・・・。



OnTimeメソッドの4つ目の引数を「Schedule:=False」にすると、直前のプロシージャの設定を解除するみたいですよ?
    • good
    • 0
この回答へのお礼

自信がないなんて、とんでもない。回答通り実行したところ、うまくいきました。本当に有難うございました。

お礼日時:2005/08/22 18:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A