• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB2010 で指定時間にプロシジャ起動するには?)

VB2010で指定時間にプロシジャ起動する方法

このQ&Aのポイント
  • VB2010で指定時間にプロシジャを起動する方法を教えてください。
  • ExcelのVBAではApplication.OnTimeメソッドを使用して指定時間にプロシージャを実行することができますが、VB2010で同じように実現する方法がわかりません。
  • Googleで検索しても、指定時間に処理を実行するサンプルは見つかりませんでした。FTPへのファイルアップロードやWebブラウザからのHTML取得など、指定時間に処理を行う必要がある場合に困っています。

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

  • ベストアンサー
  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.3

No.1です。 お礼に書かれているような感じでよいかと思います。 Timerというと、それが時間を監視しているように思われがちですが、今回の分でいうと、指定したインターバル(ミリ秒単位)で、時計を見るのを延々と繰り返しているだけですね。 それに対して、時刻を書いたメモ紙を渡して、「時計を見たときに、この時間だったらこんな風にしてね」とお願いしていると。 複数の異なるタスクがある場合も、メモ紙を増やすだけで良いので、使い勝手はよいと思います。

ky2605
質問者

お礼

テストで、 ------------------------ Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick Dim thday1 As Date Dim thday2 As Date thday2 = Now() Me.Label2.Text = thday2 thday1 = Me.TextBox1.Text If thday1 > thday2 Then Me.Label2.Text = "現在時刻 " & thday2 Else Me.Label2.Text = "過ぎました" End If End Sub ------------------------ と組んだら、TextBox1に入れた時刻を過ぎた所で、「過ぎました」に変わりました。 ここに処理内容を記述すれば、なんとかなりそうです。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.4

> 1日1回ならタスクスケジューラでもOKかもしれませんが、8時間だったり、別のプログラムでは12時間毎だったりと、 > 指定の時間に作業をするのに便利だったもので、Application.OnTime はけっこう使ってしまいました。 > > 何か代替方法があるといいのですが… 代替方法も何も、そのものずばり一定時間おきに繰り返す設定もできるのですが。 http://www.atmarkit.co.jp/fwin2k/win2ktips/1332reptsk/reptsk.html

ky2605
質問者

お礼

ありがとうございます。 タスクスケジューラーは、まさにリンク先に書かれているとおり 「1日1回とか、毎週1回といったタイミングで、指定・登録したプログラムを実行するだけ」 と思っていました。 時間や分で指定する抜け道があったとは… 今回はタイマーでなんとかなりそうですが、他に使い道があったら使ってみます。

すると、全ての回答が全文表示されます。
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

> 指定時間にFTPにファイルをアップしたり、指定時間にWEBブラウザからHTMLを取得したり それはプログラムでどうこうするんじゃなくってタスクスケジューラを使った方がいいんじゃないかなぁ。 http://technet.microsoft.com/ja-jp/library/cc721871.aspx これを使えば、特定の時間に特定のプログラムを起動することができるから、「FTPにファイルをアップ」とか「WEBブラウザからHTMLを取得」とかだけするプログラムなりスクリプトなりをつくって、スケジューラに「毎日××時に○○を実行」という風に設定すればお望みのことはできますよ。

ky2605
質問者

お礼

ありがとうございます。 言葉が足らなかったようですみません。 現在のVBAでは、フォームが起動する時に、UserForm_Initializeで、TextBox1にNow()を取り込んでいるので、 ---------------------------- Sub test1() Dim adtim As Variant ''次回動作時間を決定 adtim = DateAdd("h", 8, TextBox1.Value) Application.OnTime adtim, "test1" TextBox1.Value = adtim ~プログラム作動(例)HTML取得~ End Sub ---------------------------- のような記述になっていて、現在の時間に8時間を加えた時間が次回起動時間となり、8時間後に同じ処理が起動します。 以下、強制断するまで8時間毎にこのtest1 が自動で繰り返される事になります。 1日1回ならタスクスケジューラでもOKかもしれませんが、8時間だったり、別のプログラムでは12時間毎だったりと、指定の時間に作業をするのに便利だったもので、Application.OnTime はけっこう使ってしまいました。 何か代替方法があるといいのですが…

すると、全ての回答が全文表示されます。
  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.1

現在はVBをインストールしていないので、チェックできませんが、タイマーで、一定時間ごとに、指定の時間の範囲内に入っているかどうかを判別、入っているならばプロシージャを実行するというのはどうでしょうか? 注意しなくてはいけないのは、指定の時間の「範囲」の設定と、一度実行されたならば、次は無視するようにしないように工夫する必要がある点だと思います。 タイマーが1秒設定で、範囲は指定時間±1秒とした場合、そのあたりをやっていないと、2回実行されるリスクがあります。

ky2605
質問者

お礼

ありがとうございます。 例えば6時間毎にプログラムを起動したい場合は、AddHours で6時間後の時間を指定して、タイマーでその時間の範囲に入っているかどうかをチェック。 範囲に入っていたら、プロシージャを起動し、時間を6時間後にずらす… という処理の繰り返しという事でしょうか? 試験的にタイマーをつくってテストしてみます。

すると、全ての回答が全文表示されます。

関連するQ&A