Я новичок в VBA, и я работаю над таблицей, в которой есть нагрузки от электромобилей. Я должен проверить некоторые условия, если условия не соблюдаются, следует уменьшить нагрузку на автомобиль.
У меня есть следующий код, но вместо уменьшения нагрузки, например. от 11 до 10 или 9 или так далее, он просто удаляет нагрузку из таблицы. Прилагаются скриншоты стартового кейса и после запущенного кода.
Может кто поможет поправить код?
Sub loopwork()
Column = 215
Row = 1097
columnmove = 109
For Column = 215 To 315
columnmove = columnmove + 1
For Row = 1097 To 1192
columnload = Column - columnmove
Cells(Row, Column).Select
Cells(Row, Column - 211).Select
Cells(Row, columnload).Select
self = Cells(Row, Column)
firstcheck = Cells(Row, Column - 211)
loadvalue = Cells(Row, columnload)
If ((firstcheck < -0.05 Or firstcheck > 0.05 Or loadvalue > 100) And (self > 0)) Then
Cells(Row, Column).Select
Cells(Row, Column) = Cells(Row, Column) - 1
Cells(1, 1).Select
Row = Row - 1
End If
Next
Next
End Sub
Что со всеми операторами .Select, которые а) вообще ничего не делают, б) в первую очередь нежелательны?
Взгляни на,
If ((firstcheck < -0.05 Or firstcheck > 0.05 Or loadvalue > 100) And (self > 0)) Then
Если self > 0
и одно из других условий истинно, вы уменьшаете self на 1 (например, Cells(Row, Column) = Cells(Row, Column) - 1
) и корректируете итератор For ... Next на -1, чтобы повторить тот же цикл.
Однако вы ничего не делаете, чтобы изменить значения firstcheck или loadvalue, поэтому, если он прошел тест If один раз, он просто продолжит проходить тест If, пока self не станет больше 0.
Вот почему цикл завершается, когда self становится нулем или, как вы его выразили, 'он просто удаляет нагрузку из таблицы'.
Я думаю, проблема в том, что
Row = Row - 1
заставляет ваш счетчик оставаться в этой строке, и таким образом он продолжает отсчет от 11 до 0, потому что он увеличивает эту ячейку не только один раз, но до тех пор, покаself > 0
больше не будет истинным. • Чтобы выяснить, в чем заключается ваша проблема, я рекомендую пройти код шаг за шагом (используя F8), проверить значения ваших переменных и посмотреть, что вообще происходит. Также я рекомендую прочитать Как избежать использования Select в Excel VBA, потому что вы использовали много ненужных операторов.Select
.