Проблемы с дискриминацией vba

avatar
Atticus
1 июля 2021 в 16:22
31
1
-1

Я написал простой итерационный цикл, который проходит по каждой строке рабочей книги и считывает значение из первой ячейки. Используя функцию instring vba, я определяю, содержит ли ячейка определенные символы, и если критерии соблюдены, она либо удаляет, либо сохраняет строку. Однако, когда я запускаю этот код, есть две ячейки, написанные и отформатированные одинаково друг с другом, но одна удаляется, а другая сохраняется. Рассматриваемые ячейки содержат текст (CJ 20210526) — Merlin FLIR Calibration. Я включил код для справки, потому что он не очень длинный, и после многократного просмотра я не могу найти проблему. Я не понимаю, как можно так по-разному относиться к двум абсолютно одинаковым ячейкам.

Код фильтра в VBA

Источник
41686d6564 stands w. Palestine
1 июля 2021 в 16:24
0

Добро пожаловать в Stack Overflow! Пожалуйста, не загружайте изображения кода/ошибок, когда задаете вопрос.

Wizhi
1 июля 2021 в 16:26
0

Почему бы не вставить код в виде текста? Никто не хочет писать текст... !

freeflow
1 июля 2021 в 16:40
0

Удаляя строки в диапазоне, который вы изучаете, вы изменяете объем того, что вы исследуете. Управляющая переменная для цикла не знает, что вы удалили строку, поэтому не настраивается на удаление. Это очень распространенная проблема, с которой сталкиваются начинающие пользователи VBA при удалении элементов из коллекций. Как указано ниже, вам нужно удалить с конца диапазона, чтобы вы не влияли на строки, которые еще не обработаны.

Ответы (1)

avatar
Gary's Student
1 июля 2021 в 16:33
0

Вам нужно запустить код назад.

Заменить:

For x=1 to last_row

по:

For x=last_row to 1 Step -1

Также dim x as Long

(могут быть и другие ошибки)