Ошибка несоответствия типов при добавлении 10 секунд к значению предыдущей ячейки - PullRequest
0 голосов
/ 14 января 2019

Я хотел бы записать в ячейку предыдущее значение времени ячейки + 10 секунд.

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

Данные ячейки представлены в специальном формате DD:MM:YYYY HH:MM:SS - по этой причине это может не сработать, однако, если я добавлю + (10 / (3600 * 24)) к ячейке вручную, она успешно добавится через 10 секунд.

Даты сохраняются как пользовательские и отображаются как 24/09/2018 08:41:09.

Public Sub Add_Row()
    Dim Row As Variant
    Dim LR As Long
    Dim x As Integer
    Dim y As Integer

    LR = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row 'Counts number of rows
    x = 1
    Row = 1

    Do Until x = LR
        If Cells(Row, 2).Value <= 1 Then 'If the value of the cell is less than or equal to one do nothing and increment
            Row = Row + 1
            x = x + 1
        Else
            y = Cells(Row, 2).Value - 1 'Need a variable for the number of rows we require based on how many missed points we have

            For k = 1 To y
                ActiveSheet.Rows(Row).Insert Shift:=xlDown
                Cells(Row, 1).Value = Cells(Row - 1, 1).Value + (10 / (3600 * 24))
            Next

            Row = Row + y + 1
            x = x + 1
        End If
    Loop
End Sub

1 Ответ

0 голосов
/ 15 января 2019

MUltiplying 3600 на 24 в VBA приведет к ошибке переполнения, поскольку максимальное значение 16-битного целого числа (тип по умолчанию для результата, когда оба входных числа являются целыми числами) равно 32767. Вы можете использовать «#» который скажет VBA, что вы хотите обработать результат как двойной, например:

Cells(Row, 1).Value = Cells(Row - 1, 1).Value + (10 / (3600# * 24))  

ИЛИ вы можете использовать «# 12: 00: 10 AM #», который представляет 10 секунд, вместо того, чтобы пытаться рассчитать его, например так:

Cells(Row, 1).Value = Cells(Row - 1, 1).Value + #12:00:10 AM#

Надеюсь, это поможет.

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