Формула Excel SUM часами не работает от VBA - PullRequest
0 голосов
/ 03 октября 2018

У меня есть VBA, которая считает время, потраченное на проект, и после того, как пользователь нажал кнопку СТОП, он вводит время в другой лист.Все работает хорошо, ожидаем, что по формуле SUM рассчитывается общее количество потраченных часов.Формула =SUM(A2:A15290) дает значение 00:00:00 (ноль) в ячейке A1.Я пытался «Форматировать ячейку» по-разному, но ничего не работает.Если я ввожу время вручную в ячейки, то все работает нормально.Возможно проблема в моем VBA, который вводит отсчитанное время в ячейки?

Вот макрос, который я использую:

Option Explicit

Sub StartTimer()

    Dim Start As Single, RunTime As Single
    Dim ElapsedTime As String

    'Set the control cell to 0 and make it green
    Range("Y18").Value = 0
    Range("Y14").Interior.Color = 5296274 'Green

    Start = Timer    ' Set start time.
    Debug.Print Start
    Do While Range("Y18").Value = 0

        DoEvents    ' Yield to other processes.
        RunTime = Timer    ' current elapsed time
        ElapsedTime = Format((RunTime - Start) / 86400, "h:mm:ss")
        'Display currently elapsed time in A1
        Range("Y14").Value = ElapsedTime
        Application.StatusBar = ElapsedTime

    Loop

    Range("Y14").Value = ElapsedTime
    Range("Y14").Interior.Color = 192 'Dark red
    Application.StatusBar = False

End Sub

Sub StopTimer()
Application.ScreenUpdating = False
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
    'Set the control cell to 1
    Range("Y18").Value = 1

Set copySheet = Worksheets("MAIN")
Set pasteSheet = Worksheets("Time Spent")

copySheet.Range("Y14").Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True

End Sub

1 Ответ

0 голосов
/ 03 октября 2018

Вы помещаете текст, похожий на время, в ячейки.Используйте реальное время.

Dim Start As DOUBLE, RunTime As DOUBLE
Dim ElapsedTime As DOUBLE

...

Start = Timer    ' Set start time.

...

    DoEvents    ' Yield to other processes.
    RunTime = Timer    ' current elapsed time
    ElapsedTime = (RunTime - Start) / 86400

    Range("Y14").Value = ElapsedTime
    Range("Y14").numberformat = "[hh]:mm:ss"

Не забывайте быть осторожным относительно начала и конца этой полуночи.Таймер сбрасывается в полночь, а Excel не любит отрицательное время.

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