• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>ON TIMEメソッドを解除 OnTimeのヘルプはごらんになられましたか? expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) の Schedule にfalseを設定することで、直前の実行指定を解除することができます。 具体的には Application.OnTime timekp + TimeValue("1:00:00"),"endform",,false とでもすればいいです。

goo1985goo
質問者

お礼

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

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 do until  ・  ・ call timeup loop このようにLoopしたら、何度も、行うのではないでしょうか? expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule) Schedule :=False にするのは、実行前の中途キャンセルのはずですから、今回の場合は、一体、いくつ設定されているのか見当がつきませんが、少なくとも、Loop で、設定しているところを見直さないとダメだと思います。

goo1985goo
質問者

お礼

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

  • Musaffah
  • ベストアンサー率36% (37/101)
回答No.1

OnTimeメソッドを使ったことないので自信がありませんが・・・。 OnTimeメソッドの4つ目の引数を「Schedule:=False」にすると、直前のプロシージャの設定を解除するみたいですよ?

goo1985goo
質問者

お礼

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

関連するQ&A

  • エクセルVBA

    ユーザーフォームのテキストボックスに現在時間を表示し、表示を時計のように現在時刻を表示し続ける方法を教えてください。 以下は現在のコマンドです。 Private Sub txtTime_Change() End Sub Private Sub UserForm_Initialize() UserForm1.txtTime.Value = Time End Sub よろしくお願いします。

  • On Timeメソッド?で更新されません。

    On Timeメソッド?で更新されません。 現在Web上にあった例を参考に 下記の様にホワイトボード解析シートのA1セルに 20秒ごとに現在時刻を表示させています。 これを応用して、違うシートに 17:00に天気というマクロを実行するよう 作成したのですが上手くいきませんでした。 Sub Auto_Open()とSub auto_close()のtargetTimeを targetTime = TimeValue("17:00") Macro7を天気 としたのですが、なぜ更新されなかったか分かる方がいらっしゃいましたら ご教授下さい。 Sub Auto_Open() Dim TargetTime, WaitTime TargetTime = Now + TimeValue("00:00:01") WaitTime = TimeValue("00:00:10") Application.OnTime TargetTime, "Macro7", WaitTime End Sub Sub Macro7() On Error Resume Next Worksheets("ホワイトボード解析").Range("A1").Calculate Application.OnTime Now + TimeValue("00:00:20"), "Macro7", TimeValue("00:00:10") '↑TimeValueの最初の方をへんこうする事で時間が変わる End Sub Sub auto_close() Dim i As Integer, TargetTime On Error Resume Next For i = 1 To 10 TargetTime = Now + TimeValue("00:00:" & Application.Text(i, "00")) Application.OnTime TargetTime, "Macro7", , False Next i End Sub

  • Excel VBA ブックが閉じれない

    Excel2016を使用してVBAを使用しています。 VBA初心者ですが、よろしくお願いします。 質問内容は以下になります。 EXCEL起動と同時にUserFormを表示させ、UserForm上のコマンドボタンから ダイアログボックスを表示し、他ブックを開く処理なのですが、 他ブックを開くまでは問題ないのですが、他ブックが閉じれない状態になります。 Private Sub Workbook_Open() UserForm1.Show End Sub Private Sub UserForm_Initialize()  各種処理 End Sub Private Sub CommandButton1_Click() Dim OpenFileName As String SetCurrentDirectory (Worksheets(1).Cells(11, 3)) OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open OpenFileName End Sub UserFormを閉じると開いたブックも閉じることが可能です。 タスクマネージャーから強制的に終了しようとすると、以下メッセージが出ます。 ”開いているダイアログボックスがあるため、Microsoft Excel を終了できません。[OK]をクリックしてから、Microsoft Excelに切り替えてダイアログを閉じて下さい。" UserFormを閉じないで他ブックを閉じるには、どうすれば宜しいでしょうか。 申し訳ございませんがご教授下さい、よろしくお願いいたします。

  • エクセルVBA フォームへ動的に貼り付けたボタンのクリックイベントを検知する方法を教えてください

    (1)excel97にのVBAでフォームを作成します。 デフォルトの場合はUserForm1という名前がつきます。 (2)標準モジュールとして下記のコードを作成します。 Sub ボタンを付けて表示() Dim btn As Control  With UserForm1       ’ボタンを"button"という名前で作成します   Set btn = .Controls.Add("Forms.CommandButton.1", "button")   ’ボタンの設定をします   With btn    .Top = 5    .Left = 5    .Height = 20    .Width = 200    .Caption = "push me!"   End With   ’フォームの設定をし、表示します   .Height = 60   .Width = 220   .Show  End With End Sub (3)マクロを実行するとフォームが表示されます。 そこでこのボタン("push me!"と表示されています)をクリックします。 このクリックを検知してマクロを動かしたいのですが可能でしょうか? なおUserForm1に下記のコードを付けてみたのですがクリックは検知できませんでした。 Private Sub button_Click()  MsgBox "You click the button." End Sub

  • ユーザーフォームの切り替えについて・・・

    UserForm1とUserForm2の2つのユーザーフォームがあります。 UserForm1の中にあるcommandButton1をクリックすると、UserForm2が表示される仕組みになっています。 (ちなみに、UserForm2にもコマンドボタンがあり、クリックするとUserForm1に戻るようになっています) UserForm1の方に、 Private Sub CommandButton1_Click() UserForm2.Show 0 Unload UserForm1 End Sub UserForm2の方に、 Private Sub CommandButton1_Click() UserForm1.Show 0 Unload UserForm2 End Sub と記述してあります。 ところが、それぞれのユーザーフォームには、閉じると同時にブックが閉じるように Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) ActiveWorkbook.Save 'ブックを保存 ActiveWorkbook.Close 'ブックを閉じる Application.Quit 'excelを終了 End If End Sub というコードを記述しているため、UserForm1からUserForm2へ移るときにブックが閉じてしまいます。 右上の「×」を押したときだけブックを閉じるようにしたいのですが、どういうコードを書いたらいいのですか? 宜しくお願いします。(*´Д`人)

  • ExcelのVBAでフォームだけ表示させる方法

    はじめまして。 UserForm1で、デジタルで時間を表示する(デジタル時計)を作成しています。 Excelのアプリケーションを表示せず、フォームのみ表示させたいので、 Application.Visible = Falseとしたいのですが、この方法だと、他のExcel ファイルを起動する際に、Excelが見えなくなってしまいます。 ■やりたいこと ・Excelファイルが1つも開かれていない場合、Excelを非表示にして  Userform1のみ表示されている状態で起動する ・Userform1のみ表示している状態で、他のBooKを開いた場合、  Excelを表示して開いたBookを表示させる ・他のBooKを開いている状態で、Userform1が記述されているBook  を開いた場合、ExcelもUserform1も表示させる ・他のBookを閉じるて、Userform1が記述されているBookのみになった  場合、Excelを非表示にしてUserfrom1のみ表示されている状態にする 自分自身(Userform1を記述しているBook)のみ起動している時には、 Application.Visible=falseにすれば良いのだと思いますが、どういうロジック を組めば良いかご教授いただければ幸いです。 すみませんが、よろしくお願い致します。 それ以外の時は

  • エクセルVBAのマクロ文について

    エクセルVBAで、シート上のボタン(フォーム)をクリックすると、UserForm1が表示されてその中のTextBoxに別のシートのセルに入力したいる値を表示させたくて、以下のようにボタン(フォーム)にマクロを入力したのですが、エラーがでてきてうまくいきません。 入力したマクロが間違っているのでしょうか? Sub ボタン1_Click() UserForm1.Show UserForm1.TextBox1 = Sheets("入力").Ranges("D11").Value End Sub すみませんが、ご存知の方、教えてくださいませんか?

  • Excel 2007 VBA マクロにショートカットを割り当てる

    お世話になります。 UserForm に GotoNextItem というボタンがあり、そこをクリックすると proc_GotoNextItem というマクロを実行することにして、うまくいっています。 同じ動作を、ショートカットキー Shift+Ctrl+Nでも行わせようと思い、下のように書いてみたのですが、うまくいきません。 (ウンともスンともいいません) 何かわかるでしょうか? よろしくお願いします。 Private Sub GotoNextItem_Click() proc_GotoNextItem End Sub Private Sub UserForm_Initialize() MsgBox "start" Application.OnKey "^+{n}", "proc_GotoNextItem" End Sub Private Sub UserForm_Terminate() Application.OnKey "^+{n}" End Sub Public Sub proc_GotoNextItem() MsgBox "GotoNextItem!" End Sub フォームにボタンがあるなら Acceratator でいいじゃんと言われそうですが、フォームにフォーカスがないときがあり(それでも早見表代わりに ShowModal=False で表示させておこうと思います)それでも実行したいと思ったからです。 なお、Onkey の代わりに、 Application.MacroOptions HasShortcutKey:=True, ShortcutKey:="N" などと書くと、 「表示されていないマクロは編集されていません、[ウィンドウ再表示]を表示して、ウィンドウを表示してください」 と言われます。 よろしくお願いします!

  • Personal.xlsでUserFormを開く

    Personal.xlsに登録したマクロでBookのUserFormを開くには? 環境:EXCEL2000 Windows7 Book1.xlsにUserForm1を作りました。 Book2.xlsにもUserForm1を作りました。 (Book1のUserForm1とBook2のUserForm1は異なるForm) Personal.xlsに次のSubを追加しました Public Sub DispForm1() ActiveWorkbook.UserForm1.Show vbModeless End Sub ツールバーに釦を追加しマクロ「DispForm1」を登録しました やりたい事 (1)Book1を開き釦を押すとBook1のUserForm1を表示する (2)Book2を開き釦を押すとBook2のUserForm1を表示する 問題点 釦を押すと 「オブジェクトは、このプロパティまたはメソッドをサポートしていません」 のエラーがでる アドバイスよろしくお願いいたします。

  • ExcelのVBAでフォームが表示されない

    Sub フォーム起動() UserForm1.Show End Sub 上記の内容をModule1にしてショートカットキーをを設定し、いつでも他に作ってあるユーザーフォームが起動するようにしていました。しかし先日、久しぶりに使ってみようと、設定したショートカットキーを押したら、VBAもマクロも全くいじっていないにも関わらず、「UserForm1.Show」の部分で「実行時エラー'380': Valueプロパティを設定できません。プロパティの値が無効です。」とエラーが表示されフォームが起動できません。これはいったい何が原因なのでしょうか。

専門家に質問してみよう