Я сделал предположение, что вы хотите, чтобы пользователь видел время обратного отсчета.
Я установил xRng на D2 в отдельной процедуре («StartTimer»).Когда D2 завершит обратный отсчет, xRng будет установлен на следующую ячейку вниз.Как только xRng установлен в пустую ячейку, процедура завершается.
Я включил окна сообщений после того, как каждая ячейка закончила обратный отсчет, а также когда все ячейки закончили, чтобы было ясно, где можно добавлять вызовы процедур, когдатаймеры заканчиваются.
Dim xRng As Range
Sub StartTimer()
Set xRng = Application.ActiveSheet.Range("D2")
Call Timer
End Sub
Sub Timer()
Dim gCount As Date
gCount = Now + TimeValue("00:00:01")
Application.OnTime gCount, "ResetTime"
End Sub
Sub ResetTime()
If xRng.value > 0 Then
xRng.value = xRng.value - TimeSerial(0, 0, 1)
End If
If xRng.value <= 0 Then
MsgBox "Countdown for " & xRng.Address & " complete."
Set xRng = xRng.Offset(1) 'Move to next cell in column
If xRng.value = vbNullString Then
MsgBox "Countdown complete."
Exit Sub
End If
End If
Call Timer
End Sub
Редактировать: Этот обновленный код должен удовлетворять другим требованиям.
Dim xRng As Range
Dim oDict As Object
Sub StartTimer()
Set xRng = Application.ActiveSheet.Range("D2")
Set oDict = CreateObject("Scripting.Dictionary")
Call PopDict
Call Timer
End Sub
Sub Timer()
Dim gCount As Date
gCount = Now + TimeValue("00:00:01")
Application.OnTime gCount, "ResetTime"
End Sub
Sub ResetTime()
If xRng.value > 0 Then
xRng.value = xRng.value - TimeSerial(0, 0, 1)
End If
If xRng.value <= 0 Then
xRng.EntireRow.Interior.ColorIndex = 43
If xRng.Row = oDict(xRng.Offset(, -2).value) Then
MsgBox xRng.Offset(, -2).value & " task is over. Please proceed further."
End If
Set xRng = xRng.Offset(1) 'Move to next cell in column
If xRng.value = vbNullString Then
MsgBox "All tasks over."
Exit Sub
End If
End If
Call Timer
End Sub
Sub PopDict()
Dim lRow As Long
lRow = 2
Do Until ActiveSheet.Cells(lRow, 2).value = vbNullString
oDict(ActiveSheet.Cells(lRow, 2).value) = lRow
lRow = lRow + 1
Loop
End Sub
Перед запуском таймера эта программа проходит по каждой ячейке в столбце B.Когда он встречает новое имя команды, он добавляет это имя в словарь в качестве ключа.Он также добавляет номер строки для текущей ячейки в словарь как элемент, связанный с именем команды (ключом).Когда это будет сделано, словарь будет содержать список всех имен команд, и с каждым именем будет номер последней строки, в которой появляется имя.
Поэтому, когда таймер завершит работу, мы можем проверить словарь с помощью командыимя для текущей строки.Если текущая строка соответствует строке в словаре, это означает, что это последняя строка для текущей команды, поэтому мы можем уведомить пользователя.