• 締切済み

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

指定日時にプログラムを起動させようと考えています。 これを実現するにあたり、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