Уменьшите нагрузку, если в VBA выполнены условия

Я новичок в 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

Перед запуском кода Уменьшите нагрузку, если в VBA выполнены условия

После запуска кода Уменьшите нагрузку, если в VBA выполнены условия

Я думаю, проблема в том, что Row = Row - 1 заставляет ваш счетчик оставаться в этой строке, и таким образом он продолжает отсчет от 11 до 0, потому что он увеличивает эту ячейку не только один раз, но до тех пор, пока self > 0 больше не будет истинным. • Чтобы выяснить, в чем заключается ваша проблема, я рекомендую пройти код шаг за шагом (используя F8), проверить значения ваших переменных и посмотреть, что вообще происходит. Также я рекомендую прочитать Как избежать использования Select в Excel VBA, потому что вы использовали много ненужных операторов .Select.

Pᴇʜ 10.09.2018 10:29

Что со всеми операторами .Select, которые а) вообще ничего не делают, б) в первую очередь нежелательны?

user4039065 10.09.2018 10:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
49
1

Ответы 1

Взгляни на,

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

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