Время отсчитывать за полночь - PullRequest
0 голосов
/ 16 января 2019

Подсчет времени за полночь не удался

Подсчет времени за полночь не удался Я сделал код с двумя счетчиками - один (CountUPS), который отсчитывает секунды от 0 каждый раз, когда я запускаю программу (A1), и один (CountUP), который считает секунды с заданного времени (A2). Он отлично работает, пока считает в течение того же дня, но он получает ошибку каждый раз, когда считает в полночь. Он останавливается, когда A2 достигает 23:37:53 во времени. Что-то не так в моем определении значений?

Sub RunMe()

Dim StartS As Single
Dim CellS As Range
Dim Cellt As Range
Dim CountUPS As Date
Dim CountUp As Date

'Timer is the number of seconds since midnight.
'Store timer at this point in a variable
StartS = Timer

'Store A1 in a variable to make it easier to refer
'to it later. Also, if the cell changes, you only
'have to change it in one place
Set CellS = Sheet1.Range("A1")

'This is the starting value.
CountUPS = TimeSerial(0, 0, 0)

'Set our cell to the starting value
CellS.Value = CountUPS

Set Cellt = Sheet1.Range("A2")
CountUp = Sheet1.Range("A2")

b_pause = True

Do While CellS.Value >= 0

    CellS.Value = CountUPS + TimeSerial(0, 0, Timer - StartS + (StartS > Timer))
    Cellt.Value = CountUp + TimeSerial(0, 0, Timer - StartS + (StartS > Timer))
    DoEvents
Loop

End Sub

1 Ответ

0 голосов
/ 22 января 2019

Сообщения об ошибках устраняют множество проблем.

  • Ошибка overflow, как уже указывалось, связана с целочисленными ограничениями на аргументы функции TimeSerial.
  • Ошибка 1004, возникающая в полночь, связана с тем, что, когда Timer возвращается к 0 в полночь, выражение для секунд является отрицательным числом.Если вы не используете систему дат 1904 года, вы не можете выражать отрицательные времена в Excel.
  • Пытаясь приспособиться к «переходящей полуночи», вы объединяете секунды и дни, а также Excel и VBA.Вы в своем макросе пытаетесь добавить одну секунду, тогда как вы, вероятно, действительно хотите добавить один день.Кроме того, поскольку True в VBA равно -1, вы на самом деле вычитаете, а не добавляете в любом случае!

Я думаю, что следующие модификации могут работать, но они не были тщательно протестированы.86400 - количество секунд в дне.

Option Explicit
Sub RunMe()

Dim StartS As Single
Dim CellS As Range
Dim Cellt As Range
Dim CountUPS As Date
Dim CountUp As Date

'Timer is the number of seconds since midnight.
'Store timer at this point in a variable
StartS = TIMER

'Store A1 in a variable to make it easier to refer
'to it later. Also, if the cell changes, you only
'have to change it in one place
Set CellS = Sheet1.Range("A1")

'This is the starting value.
CountUPS = TimeSerial(0, 0, 0)

'Set our cell to the starting value
CellS.Value = CountUPS

Set Cellt = Sheet1.Range("A2")
CountUp = Sheet1.Range("A2")

'b_pause = True

Do While CellS.Value >= 0

    CellS.Value = CountUPS + (TIMER - StartS - 86400 * (StartS > TIMER)) / 86400
    Cellt.Value = CountUp + (TIMER - StartS - 86400 * (StartS > TIMER)) / 86400
    DoEvents
Loop

End Sub
...