
VBAのapplication.ontime メソッドでの日付を超えた設定方法について
EXCEL VBAを使って、2×10^n, 5×10^n, 10×10^n (n=2~6)秒ごとに
測定器からデータを取得する下のようなプログラムを作りました。
測定開始時刻から起算した時刻を表に書き込み、それを読み込んで
application.ontimeで測定マクロを起動しようとするものです。
Dim clk, clk2, clk5, clk10 As Variant
Dim i, j, n As Integer
Sheet1.Range("A1") = Date
Sheet1.Range("B1") = Time
Sheet1.Range("C1") = Now
Sheet1.Range("D1") = 6 '時刻表の読取り開始位置指定
n = 6 '時刻表の書込み開始位置指定
clk = Now '開始時刻設定
For i = 3 To 5
c2 = 2 * 10 ^ i
Sheet1.Range("A" & LTrim(Str(n))) = c2 * 1000 '繰返し回数 2×10^i(k回)
clk2 = DateAdd("s", c2, clk) '2×10^i(k回)の時刻計算
Sheet1.Range("B" & LTrim(Str(n))) = clk2 '時刻表への書込み
mdate = CStr(Format(clk2, "yyyy/mm/dd")) '日付の抽出
mtime = Format(clk2, "h:m:s") '時刻の抽出
Sheet1.Range("C" & LTrim(Str(n))) = mdate '日付の書込み
Sheet1.Range("D" & LTrim(Str(n))) = mtime '時刻の書込み
n = n + 1 '時刻表書込み位置を1進める
c5 = 5 * 10 ^ i
Sheet1.Range("A" & LTrim(Str(n))) = c5 * 1000
clk5 = DateAdd("s", c5, clk)
Sheet1.Range("B" & LTrim(Str(n))) = clk5
mdate = CStr(Format(clk5, "yyyy/mm/dd"))
mtime = Format(clk5, "h:m:s")
Sheet1.Range("C" & LTrim(Str(n))) = mdate
Sheet1.Range("D" & LTrim(Str(n))) = mtime
n = n + 1
c10 = 10 * 10 ^ i
Sheet1.Range("A" & LTrim(Str(n))) = c10 * 1000
clk10 = DateAdd("s", c10, clk)
Sheet1.Range("B" & LTrim(Str(n))) = clk10
mdate = CStr(Format(clk10, "yyyy/mm/dd"))
mtime = Format(clk10, "h:m:s")
Sheet1.Range("C" & LTrim(Str(n))) = mdate
Sheet1.Range("D" & LTrim(Str(n))) = mtime
n = n + 1
Next i
For j = 6 To 14
mdate = Str(Sheet1.Range("C" & LTrim(Str(j)))) '測定日付読込み
mtime = Sheet1.Range("D" & LTrim(Str(j))) '測定時刻読込み
待ち時間 = TimeValue("0時00分30秒")
Application.OnTime (mtime) + DateValue(mdate), "measure", TimeValue(待ち時間)
Next j
End Sub
同日付の間は動くのですが、日付が変わると止まってしまいます。
Ontimeメソッドでは日付を指定すれば日付超え時刻指定ができると
聞き、日付、時刻を別の変数として指定する方法も試しましたが、型が一致しないエラーが出て困っています。
Application.OnTime TimeValue(mtime) + DateValue(mdate), ・・・
上手い設定方法はないものでしょうか
No.1ベストアンサー
- 回答日時:
コードはよく見てませんが…
充分に先の時間(数秒後?)であることがわかっているのですから、
expression.OnTime(EarliestTime, Procedure)
の構文を利用すればいいのでは?
今からd日(d:整数) と hh:mm:ss 時間後にスタートであれば
Application.OnTime Now + n + TimeValue("hh:mm:ss") , "measure"
でいけると思います。
>型が一致しないエラーが出て困っています。
TimeValueは24時間を越える数値だと、このエラーになるようですが、それが原因ではないでしょうか?
この回答への補足
ご指摘ありがとうございました。
試しに単純化した下のマクロを実行しPCの時計を一時的に進めてテストしたところ、所望の動作を確認することができました。
Sub test()
Dim mtime, mdate, clk, c, d As Variant
Sheet1.Range("A1") = Date
Sheet1.Range("B1") = Time
Sheet1.Range("C1") = 3
For i = 3 To 6
d = Sheet1.Range("A" & LTrim(Str(i))) '日差指定
c = Sheet1.Range("B" & LTrim(Str(i))) '時差指定
mdate = DateAdd("d", d, Date) '動作日付計算
mtime = DateAdd("s", c, Time) '動作時刻計算
Sheet1.Range("C" & LTrim(Str(i))) = mdate
Sheet1.Range("D" & LTrim(Str(i))) = mtime
Application.OnTime TimeValue(mtime) + DateValue(mdate), "print_txt"
Next i
End Sub
結局、他のジョブと競合した場合の待ち時間指定に付けていたLatestTimeを削除したところ、問題なく動くことがわかりました。
本番のマクロに組み込んで、テストしてみようと思います。
ありがとうございました。
測定日時、測定時刻の指定方法を見直して見ました。
VBAは初心者なのでマニュアルやヘルプ画面と首っ引きで
マクロを作成していますが、なかなか進展しません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 09:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日時の表示の仕方
-
ユーザーフォームのラベルに日...
-
Eclipseの対応する括弧の強調表...
-
VisualBasic6.0のFormat関数で...
-
該当の日付以外を消去するプロ...
-
システム日付とは?
-
excelのVBAについて、以下のコ...
-
ExcelVBAでSQLサーバの日付時刻...
-
Delphiで扱うデータベース上の...
-
指定した日付が、その月の第何...
-
エクセルvba. PDF保存 フォルダ...
-
DataGridViewでyyyy/MM/dd
-
他のPCの日付・時刻の取得
-
カレンダーで指定した日をデフ...
-
<Access>2つの抽出条件が合致...
-
日付の差を求めるには
-
App Inventorで、こんなアプリ...
-
VB6.0 のformat関数について
-
VBで時間計算
-
テキストボックスに今日の日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
人をはめた人は 自分に返ってく...
-
DataGridViewでyyyy/MM/dd
-
エクセルのVBAで日付を検索し転...
-
ユーザーフォームのラベルに日...
-
VisualBasic6.0のFormat関数で...
-
コンボボックスに日付を表示する
-
テキストボックスにカレンダー...
-
1本あたり○円と表示する時どの...
-
指定した日付が、その月の第何...
-
VBAで当月の1日を表示するには...
-
VBA 日付・時刻の判別 時刻を認...
-
今日より前の書き方 マクロ
-
テキストボックスに今日の日付...
-
システム日付とは?
-
DateTimePickerを西暦表示にす...
-
JSPからYYYYMMDDで日付入力する
-
C++で日付判定を行いたい!!
-
ExcelVBAでSQLサーバの日付時刻...
-
VBでDate型の大小比較がうまく...
おすすめ情報