Я уже некоторое время работаю над книгой для личного пользования, и один из листов отслеживает мои часы. Мои часы вводятся вручную и рассчитываются автоматически. Я хотел бы связать ячейку с флажком или кнопкой и записать время, когда флажок был установлен. Например, когда часы идут, я ставлю флажок или нажимаю кнопку, и время записывается, но не обновляется. Я еще не очень знаком с макросами или VBA, поэтому любая помощь будет принята с благодарностью.

Изменить: я создал формулу на основе того, установлены ли флажки, а текущее время - после времени, описанного в столбцах Clock In и Clock Out . Это формула в ячейке R14: =IF(AND(AND(N14,NOW()>O14),AND(P14,NOW()>=Q14)),Q14-O14,NOW()-O14) Флажки в N14 и P14 связаны с ячейками, в которых они находятся, а значения в ячейках O14 и Q14 являются просто значениями времени, отформатированными для отображения часов в дате и времени. Это то, над чем я работаю до сих пор.

1 ответ1

0

Поскольку вы не предоставили ни одного примера того, как вы хотите, чтобы он выглядел, или как выполнялось текущее отслеживание, я просто сделал какой-то трекер времени, отслеживающий секунды.
Так что я сделал таймер таким образом:
Добавьте кнопку, и 00:00:00 в качестве времени в ячейке, где вы хотите отслеживать время.
В моем случае это ячейка C2 , я называю это timerPos .
Затем я использую ячейку A1 или любую другую запасную ячейку, чтобы отслеживать время, и если я записываю, я называю это trackerPos .
Затем, когда я нажимаю на мою кнопку, это будет выглядеть так:

Нажмите Таймер

Когда я закончу следить за временем, я снова нажимаю кнопку. Трекер очищается, а таймер обновляется:

Нажмите еще раз

Теперь самая важная часть; код для кнопки.

Sub timer()
Dim timeL As Long, timerPos As Range, trackerPos As Range

Set timerPos = Range("C2")
Set trackerPos = Range("A1")

If trackerPos.Value = "" Then
    trackerPos.Value = Now
Else
    timeL = Abs(Now - trackerPos.Value) * 86400
    timerPos.Value = DateAdd("s", timeL, timerPos.Value)
    timerPos.NumberFormat = "[h]:mm:ss"
    trackerPos.Value = ""
End If

End Sub

Использование: Переменные timerPos и trackerPos могут быть легко изменены в соответствии с вашими потребностями того, где вы хотите хранить таймер.

Первая строка части Else преобразует разницу во времени между текущим временем и временем в трекере.
Вторая строка добавляет время к таймеру. В третьей строке форматирование не отображается, если даты превышают 24 часа.

редактировать

Если мы хотим ограничить время записи каждой записи до 8 часов, нам нужно всего лишь добавить небольшой If .
8 часов - 28800 секунд, поэтому мы проверяем, больше ли timeL, чем это число, и, если так, устанавливаем его на это число.

    timeL = Abs(Now - trackerPos.Value) * 86400
    If timeL > 28800 Then
        timeL = 28800
    End If
    timerPos.Value = DateAdd("s", timeL, timerPos.Value)

Пока мы работаем над этим, я добавил некоторые изменения цвета и текста для кнопки, чтобы помочь визуально помочь таймеру.

Sub timer()
Dim timeL As Long, timerPos As Range, trackerPos As Range, button As Variant

Set button = ActiveSheet.Buttons("Button 1") 'Make sure this is the right button
Set timerPos = Range("C2")
Set trackerPos = Range("A1")

If trackerPos.Value = "" Then
    trackerPos.Value = Now
    button.Characters.Text = "Stop timer"
    button.Font.ColorIndex = 3
Else
    timeL = Abs(Now - trackerPos.Value) * 86400
    If timeL > 28800 Then
        timeL = 28800
    End If
    timerPos.Value = DateAdd("s", timeL, timerPos.Value)
    timerPos.NumberFormat = "[h]:mm:ss"
    trackerPos.Value = ""
    button.Text = "Start timer"
    button.Font.ColorIndex = 50
End If

End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .