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

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

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

検索の仕方なのか、判らないので教えてください。 ExcelのVBAではApplication.OnTime メソッドがあり、 Application.OnTime TimeValue("17:00:00"), "test01" とすれば、17時ちょうどにtest01というプロシージャが実行されます。 フォームを作って Application.OnTime UserForm1.TextBox1.Value, "test01" のようにすれば、TextBox1に時間指定して、その指定時間にtest01を起動する事も可能で、業務用アプリとして実際に使用しています。 では、これをVisual Basic 2010で同じように実行するにはどうしたら可能でしょうか? googleで調べても、時計のように、一定時間(1秒ごと)にラベルの内容を書き換え表示するようなサンプルは見つかるのですが、指定時間に、指定の処理を実行する というようなサンプルは見つかりませんでした。 指定時間に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

  • OnTimeの取り消しについて

    ヘルプには次のように記述がありますが、指定時刻に 実行させるプロシージャーの取り消しはサンプルの手順 で動作しますが、何秒後・・・を指定した場合のサンプル はうまく取り消せません。"実行時エラー '1004'"と なります。 この場合、どのように記述すればいいのでしょうか? 使用例 次の使用例は、現在から 15 秒後に my_Procedure を実行します。 Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure" 次の使用例は、午後 5 時に my_Procedure を実行します。 Application.OnTime TimeValue("17:00:00"), "my_Procedure" 次の使用例は、前の使用例で設定した OnTime メソッドの設定を取り消します。 Application.OnTime EarliestTime:=TimeValue("17:00:00"), _ Procedure:="my_Procedure", Schedule:=False

  • 指定した時刻になるとセルに色がつくようにしたい

    初心者です。エクセルのVBAで設定した時刻になったらセルに色がつくようにしたいです。 例えば、17:00時にA1セル、18:00にA2セルに色を自動でつくようにしたいと思っています。 OnTimeを使ったらよいと思っていろいろ試しましたが、設定した時刻になってもなにも起こりません。 標準モジュールに以下の内容を記述して、パソコンの時計を変更して確認しています。 できたらクリックしないでファイルオープンしてなにもせずに設定時刻に実行されるようにしたいです。 最初の3秒でB1に現在の時間を取得。 セルA1とA2をクリアしてから設定時間に色をつけるようにしたつもりです。 下記が記述内容です。 Sub 指定時間にマクロを開始() Dim stime As Date Range("A1") = "" Range("A2") = "" Range("B1").Select stime = Now + TimeValue("00:00:03") Application.OnTime TimeValue(stime), "マクロ実行内容", TimeValue("00:05:00") End Sub Sub 時刻の設定1() Application.OnTime EarliestTime:=TimeValue("17:00:00"), Procedure:="Test" End Sub Sub Procedure() Range("A1").Interior.ColorIndex = 8 End Sub Sub 時刻の設定2() Application.OnTime EarliestTime:=TimeValue("18:00:00"), Procedure:="Test" End Sub Sub Procedure2() Range("A2").Interior.ColorIndex = 9 End Sub 実行マクロは有効にしています。 ご教授よろしくお願いします。

  • エクセル時間毎ごとにマクロを実行するやり方。

     初めまして、よろしくお願いします。より正確な指定時間毎にマクロを実行させるやり方を考えています。  1分毎ごとにマクロを実行する nextTime = Now() + TimeValue("00:01:00") Application.OnTime nextTime, "時間毎ごとに実行" というやり方は解るのですが、 Application.OnTime TimeValue("09:00:00"), "時間毎ごとに実行"  この指定時間("09:00:00")に実行するマクロを利用し ("09:01:00")、("09:02:00")、("09:03:00")、("09:04:00")、("09:05:00"),・・・・・の時間、秒が00になると("hh:ss:00")マクロを実行されるやり方は有るのでしょうか。  もし有るのでしたら、よろしくお願いします。

  • タイマーマクロの二重起動防止をしたい

    おねがいします。 Sub SetTimer() On Error Resume Next '時間変更注意 Application.OnTime TimeValue("00:00:30"), "強制終了" '時間変更注意 Application.OnTime TimeValue("00:10:00"), "SetTimer" '時間変更注意 Application.OnTime TimeValue("00:10:30"), "フォルダ作成" '時間変更注意 Application.OnTime TimeValue("23:52:00"), "プリント" '時間変更注意 Application.OnTime TimeValue("23:54:00"), "DB保存" '時間変更注意 Application.OnTime TimeValue("23:56:00"), "DBから日別保存へコピー" '時間変更注意 Application.OnTime TimeValue("23:58:00"), "表のクリア" UserForm16.Show End Sub 以上ののマクロを作成、実行します。 23時52分から一連の作業をして、0時10分に自ら次回のタイマー予約を踏むマクロです。 エクセルは、無人で24時間自動起動させています。 一番最初(ブックを開く)に、どのタイミングでスタートするかわからないので、 workbookプロシージャに workbook.openのタイミングで Call SetTimerを入れてあります。 印刷が二回発生して気付いたのですが、 このままだと、0時2分に再起動がかかり、ブックを開きなおします。 (SetTimer) で、0時10分に自己発動タイマーが働きますよね。(SetTimer二回目) すると、一連の作業は二重実行されてしまい、困ってます。 マクロ自身にフラグを持たせるんですか? なんとか、一度だけ実行をすることはできないんでしょうか? 教えてください。おねがいします。

  • 時間指定して動作させたら指定時間をRESETしたいのですが

    1)Application.OnTime TimeValue(t)で時間設定した時間をすべてRESETしたいのですがどのようなすれば良いですか 2)PCの電源を切れば設定した時間はどうなるのでしょう。電源を切っても残しておきたい場合はどうすればいいのでしょうか よろしくお願いします。

  • 指定時間に自動実行

    いつもお世話になっております。 早速ですが、 OFFICEXP EXCELでデータを更新するプロシージャを指定時間に実行させたいのですが、どのようにしたら良いのでしょうか。 Ontimeを使用してみたのですがまったく動きません。 Sub Ontime() Object.OnTime earliesttime:=("10:30:00"), procedure:="オートシェイプ28_Click", schedule:=True End Sub 超初心者なのでよろしくお願いします。

  • 毎日指定時刻に自動でエクセルを開き、マクロを起動する方法

    <前提条件> ・パソコンを常に起動している(シャットダウンはしない) ・TEST.xlsにマクロ作成済 <お聞きしたいこと> ・毎日指定時刻(15:30)にTEST.xlsを開き、登録されている  マクロを自動で実行したい <私の考え> ・TEST.xlsに下記マクロを登録しようと思っております。  ただ、下記だけですと、「指定時刻にエクセルを開く」と、  「毎日指定時刻に自動でマクロを実行する」ことができません。  あまりマクロについて知識がないため、ご教示のほどよろしくお願いいたします。 Sub 指定時刻にマクロを実行する() Application.OnTime TimeValue("15:30:00"), _ "MSGBOX", _ TimeValue("00:00:30") End Sub Sub MSGBOX() msgbox"TEST" End Sub 

  • AccessVBAで実行時間を指定するには

    よろしくお願いします。 VBAで指定した時間に処理(関数)を呼び出すという事がしたくて色々調べていたらApplication.Ontime というやつでなんとかできそうだとメドが立った ・・・つもりでいたのですが、どうやらこれはExcelの機能のようでした。 参照設定でエクセルのオブジェクトライブラリをチェックしたらAccessVBAで  >Excel.Application.Ontime 待ち時間, コマンドA と記述することでひとまず実行予約的な事まではできたのですが、 指定時間になると「コマンドAが見つかりません」 というエラーメッセージが出てしまいます。 おそらくエクセルのマクロを実行しようとして「見つからない」と言われているのでは無いかと考えています。 長くなりましたが質問は、上記のようなコードで、Accessのマクロ(関数)を呼び出すにはどうすれば良いのでしょうか? よろしくお願いします。 上記の前提が勘違いの場合は併せてご指摘頂ければ幸いです。

  • シート選択について

    いつもお世話になっております。 エクセルでシートを定時(4回)データを更新させ、 更新までの間、シートを自動で選択していくPGを作成したのですが、 エクセルを開くと固まってしまいます。 どうかご指導のほどよろしくお願いします。 Private Sub WorkBook_Open() Dim Update1 As Variant Dim Update2 As Variant Dim Update3 As Variant Dim Update4 As Variant Dim Owarijikan As Variant Call DataLoad Update1 = ("08:00:00") Owarijikan = Update1 SheetLoop (Owarijikan) Application.OnTime TimeValue(Update1), "DataLoad" Update2 = ("10:00:00") Owarijikan = Update2 SheetLoop (Owarijikan) Application.OnTime TimeValue(Update2), "DataLoad" Update3 = ("15:00:00") Owarijikan = Update3 SheetLoop (Owarijikan) Application.OnTime TimeValue(Update3), "DataLoad" Update4 = ("16:00:00") Owarijikan = Update4 SheetLoop (Owarijikan) Application.OnTime TimeValue(Update4), "DataLoad" End Sub 'DataLoadはデータ更新のプロシージャです。 -------------------------------- Sub SheetLoop() Dim Jikan As Variant Dim Owarijikan As Variant Jikan = Time Owarijikan = Sheet8.Cells(5, 3).Value Do Until Jikan > (Owarijikan) Application.OnTime TimeValue(Jikan), "Select11" Jikan = Jikan + TimeValue("0:0:05") Application.OnTime TimeValue(Jikan), "SelectC" Jikan = Jikan + TimeValue("0:0:05") Application.OnTime TimeValue(Jikan), "Select12" Jikan = Jikan + TimeValue("0:0:05") Application.OnTime TimeValue(Jikan), "Select13" Jikan = Jikan + TimeValue("0:0:05") Application.OnTime TimeValue(Jikan), "SelectC" Jikan = Jikan + TimeValue("0:0:05") Application.OnTime TimeValue(Jikan), "Select16" Jikan = Jikan + TimeValue("0:0:05") Application.OnTime TimeValue(Jikan), "SelectC" Jikan = Jikan + TimeValue("0:0:05") Loop End Sub ’実行するプロシージャSelectXXはシートを選択するプロシージャです。 以上よろしくお願いします。

  • 「一定の時間間隔で5秒毎にMacro1を実行する」

    「一定の時間間隔で5秒毎にMacro1を実行する」 一応startマクロ、stopマクロは作成してみたのですが、 下記stopコマンド実行しても止まらなかったような気がします。 ここから改変するとしたらどうですか? Public timestop As Boolean Sub test() Dim tt As Double Dim wt As Double tt = Now + TimeValue("00:00:05") '5秒後 wt = TimeValue("00:00:02") 'インターバル2秒 Application.OnTime tt, "Macro1", wt If (timestop = False) Then Time = Timer Application.OnTime earliesttime:=(Now + TimeValue("00:00:01")), procedure:="test" End If End Sub ---------------------------------------- ここからstart,stopマクロ Sub t_start() timestop = False Call test End Sub Sub t_stop() timestop = True End Sub

専門家に質問してみよう