Ради того, чтобы закрыть эту проблему, я выяснил, что было не так, и выкладываю это, чтобы помочь другим помнить, что, когда ваш код кажется нормальным, возможно, что-то не так, данные, которые вы обрабатываете.
В моем случае части исходного набора данных отсутствовали, и, как следствие, вычисления не будут выполняться из-за ОШИБОК.
Я должен был добавить в свой IF-блок On error Resume Next
, хотя я думал, что этобыло бы лучше хранить значения ячеек в переменных.Это продолжало мой код.Я читал, что это не лучшая практика для обработки ошибок в VBA, но в настоящее время это работает.
Затем мне пришлось Set
диапазон и start_cell, как упомянуто @SJR, а также добавить.value
до Application.Sum
.Таким образом, мои изменения кода отражены здесь:
For l = 2 To lastRow
If Cells(l, 2).Value = "00:00:00" Then
Set start_cell = Cells(l, intensity_column) 'I added "Set"
Set rng = Range(start_cell, start_cell.Offset(23, 0)) 'I added "Set"
Cells(l, lastCol + 1).Value = Application.Sum(rng) 'I added ".Value"
End If
Next l
'I create the column with the subtracted value of hour "22:00" from the value of hour "05:00", which should be written at row with hour "00:00"
Dim sm5, sm22 As Variant 'I created two more variables
For l = 2 To lastRow
If Cells(l, 2).Value = "00:00:00" Then
On Error Resume Next 'I added a command how to handle the Error due to unclean data
sm5 = Cells(l, lastCol-1).Offset(5, -2)
sm22 = Cells(l, lastCol-1).Offset(22, -2)
ActiveSheet.Cells(l, lastCol + 2).Value = sm5 - sm22
End If
Next l