• 締切済み

指定日時にプログラムを起動させたい。

指定日時にプログラムを起動させようと考えています。 これを実現するにあたり、Application.OnTime 指定時刻,プログラム とすれば良さそうだと考えました。 ------------------------------------------------------- Application.OnTime DateValue(MyGoDate) + TimeValue(MyGoTime), "一括実行.xls!All_Execute_Click" ------------------------------------------------------- ところが、次の手順で指定日時を作成すると「実行時エラー13型が一致しません」のエラーが出てしまいます。 指定時刻には、必ずバリアント型を指定するとのことで、 「指定時刻 = DateValue("2007/08/31") + TimeValue("07:30:00")」 次の手順で作成されたものが、バリアント型になっていないことが原因かと思います。 ▼質問・お願い 1)「実行時エラー13型が一致しません」のエラーを回避するには、どうしたらよいでしょうか。 2)指定日時にプログラムを起動させるより良いコードがあれば、教えて頂けませんでしょうか。 ▼手順 ------------------------------------------------------- (1)ワークシートのセルに指定日時を入力。 指定日時を入力すると数値になるため、WorksheetFunction.Text((Cells(*, *)), "00")で文字列に変換。 (2)次の変数に指定時刻の要素を格納。 GoYear :Cells(4, 2)に年を入力。 GoMonth:Cells(4, 4)に月を入力。 GoDay :Cells(4, 6)に日を入力。 GoHour :Cells(5, 4)に時を入力。 GoMin :Cells(5, 6)に分を入力。 GoSec  : "00"を固定。 (3)DateValue("2007/08/31")、TimeValue("07:30:00")の( )の中身をつなげる。 MyGoDate = CStr(GoYear & "/" & GoMonth & "/" & GoDay) ▼作成したVBAコード Sub 時刻設定() '指定日時 Dim GoYear As Variant Dim GoMonth As Variant Dim GoDay As Variant Dim GoHour As Variant Dim GoMin As Variant Dim MyGoDate As Variant Dim MyGoTime As Variant Const GoSec As Variant = "00" '秒は固定値。 GoYear = Cells(4, 2) '月 mmに変換。 GoMonth = WorksheetFunction.Text((Cells(4, 4)), "00") '日 ddに変換。 GoDay = WorksheetFunction.Text(Cells(4, 6), "00") '時 hhに変換。 GoHour = WorksheetFunction.Text(Cells(5, 4), "00") '分 mmに変換。 GoMin = WorksheetFunction.Text(Cells(5, 6), "00") MyGoDate = CStr(GoYear & "/" & GoMonth & "/" & GoDay) MyGoTime = CStr(GoHour & "/" & GoMin & "/" & GoSec) Application.OnTime DateValue(MyGoDate) + TimeValue(MyGoTime), "一括実行.xls!All_Execute_Click" End Sub 以上 お手数ですが、よろしくお願い致します。

みんなの回答

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

こんばんは。 指定日時に実行させるのなら、AT コマンドではありませんか? いくらExcelに設定したところで、Excelをずっと開けておくならともかく、クローズしたらおしまいだと思います。Excelを自動起動した後に、個人用マクロブックか、特定のブックを起動させて、今度は、ExcelのOnTime メソッドで設定をさせる、というのがよいかと思います。ただし、パソコンは起動されていることです。 お書きになったコードだけを言わせていただくとします。 Application.OnTime の引数はVariant 型でもかまわないけれども、一般的には、Date 型ですね。 Dim myGoDate As Date Dim myGoHour As Date ' MyGoDate = CStr(GoYear & "/" & GoMonth & "/" & GoDay) ' ? myGoDate = CDate(GoYear & "/" & GoMonth & "/" & GoDay) '×MyGoTime = CStr(GoHour & "/" & GoMin & "/" & GoSec) myGoTime = CDate(GoHour & ":" & GoMin & ":" & GoSec) 'ここが違いますね。"/" で区切ったら、Date型にはならず、文字列のままになり、型が違うというエラーが発生します。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

ちょっと違うけど アレンジすれば、使用できます。 011 マクロの実行を一時中断し指定時刻に再開する '----------------------------------------------------------------------------------------- '【ヒント】 ' このマクロは、おためし機能の動作用のコードを含んでいます。(概ね下半分) ' ★★★の行またはサブプロシージャーが、タイトル機能に関係するコードです。(概ね上半分) '========================================================================================= ' ◆標準モジュールのコード◆ '----------------------------------------------------------------------------------------- Option Explicit Dim 指定時刻 As Variant '★★★ Dim タイトル As String Dim スタイル As Long Dim メッセージ As String Dim 応答 As Variant '========================================================================================= Private Sub マクロの実行を一時中断し指定時刻に再開する() '★★★ 指定時刻 = Now + TimeValue("00:00:03") '現在時刻より3秒後 ※1 Application.Wait (指定時刻) 'マクロ実行を指定時刻まで中断する 再開後に処理するマクロ End Sub '----------------------------------------------------------------------------------------- Private Sub 再開後に処理するマクロ() メッセージ = "指定時刻になりました。" & Chr(13) & Chr(13) & _ "処理を再開します" 応答 = MsgBox(メッセージ, スタイル, タイトル) End Sub '========================================================================================= '<コメント> '※1 HH:MM:SSの形式で任意の時分秒を記入する (例) 1分後なら 00:01:00 '----------------------------------------------------------------------------------------- Sub おためしマクロ() おためしメッセージを表示する マクロの実行を一時中断し指定時刻に再開する '★★★ End Sub '----------------------------------------------------------------------------------------- Private Sub おためしメッセージを表示する() Worksheets("Title").Select Range("P17").Select 'カーソルを定位置へ移動する タイトル = "500連発 第2弾 サンプルマクロ" スタイル = 64 'vbInformation メッセージ = "[OK]ボタンをクリックすると、" & Chr(13) & Chr(13) & _ "マクロの実行を中断し、3秒後に再開します" 応答 = MsgBox(メッセージ, スタイル, タイトル) End Sub '----------------------------------------------------------------------------------------- Sub Auto_Close() Application.DisplayAlerts = False '閉じる際に確認メッセージを出さない ActiveWorkbook.Close '現在開いているブックを閉じる End Sub '---------------------------------------------------------------------------

関連するQ&A

  • VBAのタイマー

    こんにちは VBAで、一日に一回起動するマクロを作ろうと思っています。 Sub timer() Dim settime As Variant Dim waittime As Variant settime = TimeValue("00:35:00") '指定時刻 waittime = TimeValue("00:01:00") settime = settime + waittime '指定時刻待ち時間 Application.OnTime TimeValue(settime), "sub" End Sub な感じなのですが、これだと一度起動すると二日目以降は動作しなくなります。 毎日起動するにはどうしたら良いものでしょうか

  • シート選択について

    いつもお世話になっております。 エクセルでシートを定時(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はシートを選択するプロシージャです。 以上よろしくお願いします。

  • Excel VBAでセルに書いた時刻を取得したいのに・・・

    ExcelのVBAで、OnTimeを使い、 定時に印刷させるプログラムを組んでいます。 今までOnTimeの時刻設定に直接時刻を入れ込んでいたのですが、 ワークシートに登録した時刻を使うようにしたいと思い、 次のようにしたのですが、 Setのところの変数名で「オブジェクトが必要です」エラーが出ます。 ・・・何が悪いのでしょうか? Dim routinetime1 As String Dim routinetime2 As String Dim routinetime3 As String Set routinetime1 = Range("A1").Value Set routinetime2 = Range("B2").Value Set routinetime3 = Range("C3").Value Application.OnTime TimeValue(routinetime1), "印刷プロシージャ" Application.OnTime TimeValue(routinetime2), "印刷プロシージャ" Application.OnTime TimeValue(routinetime3), "印刷プロシージャ" よろしくお願いいたします。

  • Excel2010 VBAについて

    以下のソースを書いて実行したのですが 「実行エラー'1004' WorksheetFunctionクラスのVlookupプロパティを取得できません」 と表示されます Sub 時刻表示() '日本の時間と選択した年の時刻・時差を1秒ごとに表示しなおす Dim City As String Dim Jisa As Long Application.ScreenUpdating = False City = Range("C6").Value Jisa = WorksheetFunction.VLookup(City, _ Worksheets("都市リスト").Range("B3:C14"), 2, False) Range("E7").Value = Jisa Range("C4").Value = Now Range("C7").Value = DateAdd("h", Jisa, Now) Range("C4, C7").NumberFormat = "m/d h:mm:ss" Application.ScreenUpdating = True Application.OnTime Now + TimeValue("0:00:01"), "時刻表示" End Sub Sub 時刻表示終了() '時計を止める Application.OnTime Now + TimeValue("0:00:01"), "時刻表示", Schedule:=False End Sub デバックをすると Application.OnTime Now + TimeValue("0:00:01"), "時刻表示", 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 実行マクロは有効にしています。 ご教授よろしくお願いします。

  • セルの現在時刻表示の更新間隔をセルから入力したい

    セルの現在時刻表示の更新間隔をセルから入力したい マクロは以下を使用してますが更新間隔変更のtimevalue(c3)とするとエラー13が出ます。 どなたかお教え下さい。 ******************************************** Sub Auto_Open() Dim TargetTime, WaitTime TargetTime = Now + TimeValue("00:00:01") WaitTime = TimeValue("00:00:10") Application.OnTime TargetTime, "Macro1", WaitTime End Sub Sub Macro1() Dim TargetTime, WaitTime Calculate TargetTime = Now + TimeValue("00:00:01") 'ココをセルにするとエラー13がでる WaitTime = TimeValue("00:00:10") Application.OnTime TargetTime, "Macro1", WaitTime 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, "Macro1", , False Next i End Sub **********************************************

  • EXSEL OnTime

    OnTimeを使ったタイマーですが、サンプルを利用して実行させると次のようなエラーになってしまいます。 「マクロ’I:¥一定時間後にxls'実行マクロ'が見つかりません。」 なにか設定する事項でもあるのでしょうか? Option Explicit Dim 待ち時間 Dim 指定時刻 Sub 一定の時間間隔でマクロを実行する() 指定時刻 = Now + TimeValue("0時00分05秒") '5秒後 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "実行マクロ名", TimeValue(待ち時間) End Sub Sub 実行マクロ名() Dim wavfile As String wavfile = "C:\Windows\Media\ringin.wav " 'wavファイルのパス Shell "mplay32.exe /play /close " & wavfile End Sub

  • OnTimeを使ったのですが「エラー」になってしまいます

    VBA でOnTimeの「サンプル」を使ってのタイマーですが、実行すると次のようなエラーが出て、実行マクロへ行けません。 「マクロ"I:\一定時間後に.xls'!実行マクロ名'が見つかりません。」 どうしてなのか教えてください。 Option Explicit Dim 待ち時間 Dim 指定時刻 Sub 一定の時間間隔でマクロを実行する() 指定時刻 = Now + TimeValue("0時00分05秒") '5秒後 待ち時間 = TimeValue("0時00分01秒") Application.OnTime TimeValue(指定時刻), "実行マクロ名", TimeValue(待ち時間) End Sub Sub 実行マクロ名() Dim wavfile As String wavfile = "C:\Windows\Media\ringin.wav " 'wavファイルのパス Shell "mplay32.exe /play /close " & wavfile End Sub

  • 外部データの保存

    http://www.bloomberg.co.jp/markets/commodities/cfutures.html 上記のサイトをエクセルのWebクリエで取り込んで、2分おきにっ更新していますが、そのデータをすべて保存したいです。 そこで、サイトにあるコードを使いました。 1、50秒おきにデータをほかのセルにコピー 2、コピーした先の数値が、(コピー元の)時間と時価が同じなら、コピーしない。 3、コピーした先が、(コピー元の)時間と時価が違うなら、1つ下にズラしてコピー 4、・・・・ としていますが、実行してみると、数値のコピーはされますが、 「Book1の一定間隔で実行するマクロを実行できません。」 となります。 どうしてでしょうか。 Option Explicit Dim 開始時刻, 終了時刻, インターバル, 反復時刻 Public Line As Integer '--------------------------------------------------------------------------------- Sub 開始時刻から終了時刻まで一定間隔でマクロを実行する() 開始時刻 = TimeValue("09:00:00") 終了時刻 = TimeValue("23:00:00") インターバル = TimeValue("00:00:50") Application.OnTime 開始時刻, "一定間隔で実行するマクロ" End Sub '--------------------------------------------------------------------------------- Sub 一定間隔で実行するマクロ() If TimeValue(Now) >= 終了時刻 Then '終了時刻になったら終わる MsgBox "終了時刻になりました。" Exit Sub End If Call 必要な作業を行うマクロ 反復時刻 = TimeValue(Now) + インターバル Application.OnTime 反復時刻, "一定間隔で実行するマクロ" End Sub '--------------------------------------------------------------------------------- Sub 必要な作業を行うマクロ() Dim flag As Integer Line = 11 If Cells(Line, 2).Value = Cells(2, 2).Value And Cells(Line, 1).Value = Cells(2, 5).Value Then Line = Line + 1 Cells(Line, 2).Value = Cells(2, 2).Value Cells(Line, 1).Value = Cells(2, 5).Value Else Cells(Line, 2).Value = Cells(2, 2).Value Cells(Line, 1).Value = Cells(2, 5).Value End If End Sub

  • VBAの簡略化について

    VBAで数値をカウントするマクロを作りました。  Dim Co1 As Integer Co1 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<1") Dim Co2 As Integer Co2 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<2") Dim Co3 As Integer Co3 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<3") Dim Co4 As Integer Co4 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<4") Dim Co5 As Integer Co5 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<5") Dim Co6 As Integer Co6 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<6") Dim Co7 As Integer Co7 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<7") Dim Co8 As Integer Co8 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<8") Dim Co9 As Integer Co9 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<9") Dim Co10 As Integer Co10 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), "<10") Dim Co11 As Integer Co11 = WorksheetFunction.CountIf(Range(Cells(○, ○), Cells(○, ○)), ">=10") Cells(2, 1) = Co1 Cells(3, 1) = Co2 - Co1 Cells(4, 1) = Co3 - Co2 Cells(5, 1) = Co4 - Co3 Cells(6, 1) = Co5 - Co4 Cells(7, 1) = Co6 - Co5 Cells(8, 1) = Co7 - Co6 Cells(9, 1) = Co8 - Co7 Cells(10, 1) = Co9 - Co8 Cells(11, 1) = Co10 - Co9 Cells(12, 1) = Co11 Cells(2, 1) = "0~0.999" Cells(3, 1) = "1~1.999" Cells(4, 1) = "2~2.999" Cells(5, 1) = "3~3.999" Cells(6, 1) = "4~4.999" Cells(7, 1) = "5~5.999" Cells(8, 1) = "6~6.999" Cells(9, 1) = "7~7.999" Cells(10, 1) = "8~8.999" Cells(11, 1) = "9~9.999" Cells(12, 1) = "10~" これを短くする方法を教えてください。

専門家に質問してみよう