アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルの時間ですが
15分起きにタイマーアクションを作っています。
タイマーがセットアップされたら(実行ではありません)
セットアップされた時間をセルに書き出しています。エラーログがわりです。
その内容が
2015/4/28 23:15
2015/4/28 23:30
2015/4/28 23:45
2015/4/28 0:00
2015/4/29 0:15
2015/4/29 0:30

で、28日の 0時は 29日の 0時 でないとおかしいのですが、28日です
当然 0:00時の 作業は 行われませんでした。
変数は
Public インターバル As Variant
Public 反復時刻 As Variant  です。以上は実行時の状態です

で、今日 下記を作って実行(実行時も 同じロジックです。Debugが無いだけ)
反復時刻 = Date + TimeValue("23:30:00")
Debug.Print 反復時刻
インターバル = TimeValue("00:15:00")
Debug.Print インターバル
反復時刻 = 反復時刻 + インターバル
Debug.Print 反復時刻
反復時刻 = 反復時刻 + インターバル
Debug.Print 反復時刻
Exit Sub

これで、
2015/04/29 23:30:00
0:15:00
2015/04/29 23:45:00
2015/04/30
2015/04/30 0:15:00

45分の次、日付は 1日繰り上がったのですが、時間がない

で、
反復時刻 = Date + TimeValue("23:30:01")
Debug.Print 反復時刻
インターバル = TimeValue("00:15:00")
Debug.Print インターバル
反復時刻 = 反復時刻 + インターバル
Debug.Print 反復時刻
反復時刻 = 反復時刻 + インターバル
Debug.Print 反復時刻
反復時刻 = 反復時刻 + インターバル
Debug.Print 反復時刻

2015/04/29 23:30:01
0:15:00
2015/04/29 23:45:01
2015/04/30 0:00:01
2015/04/30 0:15:01
1秒で 変数は 保たれる。現実的解決方法としては、有効ではあるのですが・・・
イマイチな気が
Variant  が まずいのでしょうか? Date でも 同じでした。

質問者からの補足コメント

  • 上記の現象は 2013 のみです
    2007/2010 とも 同じコードですが 0:00 の記録は有ります。(正常に動いています)
    疑ったことも無かったので、気づくのが遅れました・・・が真相です

      補足日時:2015/04/30 08:31
  • 反復時刻 = format(反復時刻 + インターバル, "yyyy/mm/dd h:nn:ss"))
    で、 解決

    まあ、Ver 上がるたびに、ルールがきつくなるのは、承知とは言え・・

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/05/01 19:42

A 回答 (1件)

Debug.Print 反復時刻


がまずいですね。
たぶんVBAの仕様だと思いますが、日付型をPrintで表示するとき、時刻が0:00:00の場合は日付だけ表示して時刻は表示しないようになっているんでしょう。

常に時刻も表示したいなら、Format関数で書式を指定してください。
Debug.Print Format(反復時刻, "yyyy/mm/dd h:nn:ss")
この回答への補足あり
    • good
    • 0
この回答へのお礼

恐縮です。
お説の通りでした・・・
でも、ホンチャンの 0:00 で その日の 0:00 に成ってしまう件が、日付が戻る件が  解決しません。何かお気づきは有りませんでしょうか

下が 本チャンのコードです。

If Format(反復時刻, "hh:mm:ss") > Format("15:14:00", "hh:mm:ss") And Format(反復時刻, "hh:mm:ss") < Format("16:30:00", "hh:mm:ss") Then
反復時刻 = Date + TimeValue("16:45:00")
Else
反復時刻 = 反復時刻 + インターバル
End If
If Format(反復時刻, "yyyy/mm/dd" & " " & "hh:mm:ss") < Format(終了時刻, "yyyy/mm/dd" & " " & "hh:mm:ss") Then '終了時刻になったら終わる
待ち時間 = DateAdd("s", 20, 反復時刻)
On Error Resume Next
Application.OnTime 反復時刻, "orgdata.funjob", , False
On Error GoTo 0

Application.OnTime 反復時刻, "orgdata. funjob ", 待ち時間
tim = orgdata.Cells(100, 10).End(xlUp).Row + 1
orgdata.Cells(tim, 10) = 反復時刻 ' 開始時刻 '
End If

お礼日時:2015/04/30 00:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!