Итак, у меня есть код, который зацикливается и считает 1, если есть определенный статус с соответствующей датой. Обычно формат выглядит следующим образом: статус, дата, статус, дата, статус, дата и т. д.
Однако мой набор данных изменился и стал статусом, датой, человеком, статусом, датой, человеком, статусом, датой, человеком и т. д.
Раньше я использовал шаг (-2) как, но теперь, когда я перехожу на шаг (-1) или даже шаг (-3), это дает мне ошибку, определяемую приложением или объектом.
Кто-нибудь знает, почему это так?
Sub CheckDates()
Dim count As Integer
Dim i As Integer
Dim j As Integer
Sheets(1).Select
lastrow = ActiveSheet.Cells(Rows.count, "B").End(xlUp).Row
'have to keep data in a table for this to actually work as it ctrls+left to the table, which will end where the very last text of any row is
lastColumn = ActiveSheet.Cells(1, Columns.count).End(xlToLeft).Column
count = 0
i = 2
j = lastColumn
For i = 2 To lastrow
For j = lastColumn To 1 Step (-1)
If Sheet1.Cells(i, j) < Sheet2.Cells(1, 1) And Sheet1.Cells(i, j - 1) = "Reçu" Then
count = count + 1
GoTo NextIteration
End If
Next j
NextIteration:
Next i
Sheet2.Cells(1, 7) = count
Sheets(2).Select
Call DeleteSAC
'Runs the DeleteSAC Macro
End Sub


Посмотри на эту строку
If Sheet1.Cells(i, j) < Sheet2.Cells(1, 1) And Sheet1.Cells(i, j - 1) = "Reçu" Then
если j = 1, тогда j-1 будет 0, и вы получите ошибку (т.е. столбца 0 не существует)
с Step -2 вы не получите ошибку, потому что (если я должен угадать) количество столбцов четное, т.е. последнее значение j будет 2. на следующей итерации j будет 0, а тело цикла не будет выполняться вообще, таким образом, нет ошибки.
Мм, понятно .. есть ли какое-нибудь решение для этого? У меня создалось впечатление, что если я дойду до первого столбца в своей строке, он перейдет к третьей строке и так далее, и так далее.
Я бы посоветовал печатать i и j перед if для каждой итерации, чтобы вы могли видеть, что происходит. Есть способы сделать это лучше, но с минимальными изменениями - я думаю, For j = lastColumn-1 To 2 Step -3. Я предполагаю, что первый столбец с датой - это B, то есть столбец 2.
Вместо Goto NextIteration обычно используется Exit For. ActiveSheet - это третий лист или это на самом деле Sheet1?