Я хочу запустить таймер в Excel, используя макросы поочередно, т.е. как только время ячейки D2 закончится, тогда должно начаться время ячейки D3 - PullRequest
0 голосов
/ 05 декабря 2018

Я хочу запустить таймер в Excel, используя макросы поочередно, т. Е. Как только время ячейки D2 истечет, должно начаться время ячейки D3, а затем D4, пока мы не получим время в столбце D.В соответствии с приведенным ниже кодом все время работает параллельно, где я хочу запустить его последовательно.

В настоящее время я использую следующий код:

Dim gCount As Date

Sub Timer()
    gCount = Now + TimeValue("00:00:01")
    Application.OnTime gCount, "ResetTime"
End Sub

Sub ResetTime()
    Dim xRng As Range
    Set xRng = Application.ActiveSheet.Range("D2")
    Set xRng = Application.ActiveSheet.Range("D3")
    xRng.Value = xRng.Value - TimeSerial(0, 0, 1)
    If xRng.Value <= 0 Then
        MsgBox "Countdown complete."
        Exit Sub
    End If
    Call Timer
End Sub

1 Ответ

0 голосов
/ 05 декабря 2018

Я сделал предположение, что вы хотите, чтобы пользователь видел время обратного отсчета.

Я установил 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.Когда он встречает новое имя команды, он добавляет это имя в словарь в качестве ключа.Он также добавляет номер строки для текущей ячейки в словарь как элемент, связанный с именем команды (ключом).Когда это будет сделано, словарь будет содержать список всех имен команд, и с каждым именем будет номер последней строки, в которой появляется имя.

Поэтому, когда таймер завершит работу, мы можем проверить словарь с помощью командыимя для текущей строки.Если текущая строка соответствует строке в словаре, это означает, что это последняя строка для текущей команды, поэтому мы можем уведомить пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...