Почему шаг (-1) выдает ошибку, определяемую приложением или объектом, но не шаг (-2)

Итак, у меня есть код, который зацикливается и считает 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

Вместо Goto NextIteration обычно используется Exit For. ActiveSheet - это третий лист или это на самом деле Sheet1?

VBasic2008 22.12.2018 21:45
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
53
1

Ответы 1

Посмотри на эту строку 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, а тело цикла не будет выполняться вообще, таким образом, нет ошибки.

Мм, понятно .. есть ли какое-нибудь решение для этого? У меня создалось впечатление, что если я дойду до первого столбца в своей строке, он перейдет к третьей строке и так далее, и так далее.

Joel Bastien 22.12.2018 21:05

Я бы посоветовал печатать i и j перед if для каждой итерации, чтобы вы могли видеть, что происходит. Есть способы сделать это лучше, но с минимальными изменениями - я думаю, For j = lastColumn-1 To 2 Step -3. Я предполагаю, что первый столбец с датой - это B, то есть столбец 2.

buran 22.12.2018 21:13

Другие вопросы по теме