Вот пример того, как сделать вычисления для таймера и как отформатировать ввод / вывод.
Вам необходимо проверить свой формат ввода пользователя и преобразовать его в hh:mm:ss
, например, если ваш пользовательвходы 01:15
, что составляет mm:ss
, вам нужно преобразовать его в 00:01:15
.Затем этот формат можно преобразовать в реальное время с помощью TimeValue
, а с помощью CDbl(TimeValue(UserInput)) * 24 * 60 * 60
вы получите количество секунд этого времени.
Обратите внимание, что нам нужно преобразовать время в секунды, поскольку ваш Timer
рассчитывается в секундах.
SecondsToRun - (Timer - TimerStart)
дает вам количество секунд, оставшихся на вашем таймере.А с помощью Format$((SecondsToRun - (Timer - TimerStart)) / 24 / 60 / 60, "hh:mm:ss")
вы можете отформатировать секунды как удобочитаемое время.
Option Explicit
Public Sub TimerExample()
Dim UserInput As String
UserInput = "01:15" 'this is what the user inputs and how long the timer should run
'validate userinput und ensure hh:mm:ss format
Select Case Len(UserInput) - Len(Replace$(UserInput, ":", ""))
Case 2 'input format is hh:mm:ss
Case 1 'input format is mm:ss
UserInput = "00:" & UserInput
Case 0 'input format is ss
UserInput = "00:00:" & UserInput
Case Else
MsgBox "invalid input"
Exit Sub
End Select
'we need to convert the string UserInput into a double and
'convert it into seconds (Timer uses seconds!)
Dim SecondsToRun As Long
SecondsToRun = CDbl(TimeValue(UserInput)) * 24 * 60 * 60
Dim TimerStart As Double
TimerStart = Timer 'remember when timer starts
Do
Cells(1, 1).Value = Format$((SecondsToRun - (Timer - TimerStart)) / 24 / 60 / 60, "hh:mm:ss")
'count backwards from 01:15 format as hh:mm:ss and output in cell A1
DoEvents
Loop While TimerStart + SecondsToRun > Timer 'run until SecondsToRun are over
End Sub
Таким образом, этот код запустит таймер, который отсчитывает в обратном направлении от 01:15
(1 минута, 15 секунд) назад до 0
,Выход будет в ячейке A1 следующим образом:
00:01:15
00:01:14
00:01:13
00:01:12
00:01:11
00:01:10
00:01:09
00:01:08
and so on.