Команда не применима для перекрывающихся диапазонов

Автор Посетитель, 10 июля 2024, 17:00

Посетитель

Здравствуйте !
Подскажите, пожалуйста, не могу никак разобраться в этой магии ...
Есть таблица.
Макрос останавливается на удалении отфильтрованных строк по значению "Да" в одном столбце, выдавая сообщение "Команда не применима для перекрывающихся диапазонов". Объединённых ячеек в разделе ленты "Выравнивание" нет (ведь если бы были, то была бы активна строка "Объединить ... ")
Если перед запуском макроса вручную "отменяю объединение ячеек" в столбце, то макрос работает.
Если прописываю в макросе Columns("R:R").UnMerge в самом начале макроса (на тот момент колонка идёт под буквой R) или Columns("D:D").UnMerge перед непосредственной фильтрацией столбца — то макрос не работает.
Как только вручную перед работой макроса отменяю "объединение ячеек" в столбце — макрос работает.

Что неправильно ? Как так может быть ? Почему UnMerge не отменяет объединение ?

.................
 
    Range("D3").AutoFilter Field:=4, Criteria1:="Да" ' Показывает строки в колонке 4, где есть "Да"
    ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete ' Удаляет эти строки, начиная со второй строки
   
    .............

Администратор

Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Может быть вы не учитываете, что вы макросу передаёте ещё одну строку, которая находится под таблицей?
Вы включаете в выборку строку, которая находится под таблицей.
Может быть что-то не так с этой строкой.

Администратор

Может быть в таблице есть скрытые столбцы, SpecialCells даёт несколько областей и макрос не может работать с несколькими областями.
Вот так можно избежать работы с несколькими несмежными областями. Обращайтесь к одному столбцу, который виден, и затем обращайтесь через него к целым строкам:
ActiveSheet.AutoFilter.Range.Columns(1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete

Посетитель

Спасибо огромное ! Сработало ! (и прощу прощения, там не таблица. Просто столбцы и строки)
Но как Вы объясните, что при ручной отмене объединения ячеек в столбце макрос работал ? Ведь несмежные области тогда всё равно оставались, если они не в этом столбце.

И я отменял объединение Cells.UnMerge, для всех ячеек листа. Но это не помогало.

Администратор

Несмежные области появлялись потому, что есть скрытые столбцы, а не потому, что есть объединённые ячейки.
Как отмена объединения ячеек решала проблему - не знаю.
Возможно, что мой совет неправильный и решение было в чём-то другом.

Администратор


Администратор

Мне кажется, что мой совет случайно помог. Я думал, что виноваты скрытые столбцы, а на самом деле виноваты объединённые ячейки.
Возможно обращение к диапазону через один столбец решило проблему, которую создавали объединённые ячейки.

Посетитель

Надо же ......... Вы совершенно правы ! Есть 3 или 4 столбца, которые стянуты по ширине так, что даже не видно номеров столбцов. Когда я растянул столбцы, чтобы хотя бы номера были — мой прежний макрос заработал.
Тогда и, скорее, когда я перед запуском макроса вручную отменял объединение — то растягивал несколько столбцов, чтобы добраться до столбца, где удалял объединение: в результате ,скорее, столбцы становились видимыми и макрос спокойно срабатывал. А я думал, что это так ручная отмена объединения помогла !
Вам большой респект за вникание в проблему и оперативный ответ! На других форумах копали совсем в другом месте и не нашли причину.

Администратор

Сейчас создал тестовый файл, скрыл в нём один столбец, чтобы стало несколько несмежных областей и команда Delete вызывала ошибку, о которой вы писали.
Значит моё предположение было правильное - виноваты скрытые столбцы.
При чём здесь объединённые ячейки, не могу сказать. Надо смотреть файл.

Администратор

У меня было предположение, что во время объединения ячеек вы отобразили скрытые столбцы.
Но я подумал, что вы это бы запомнили. А оказалось, что не обратили внимание.

Посетитель

Ячейки не при чём ) Я просто растягивал столбцы, и тогда макрос всё "видел" )
Единственное .... я думал, что макросу всё равно, видимо или нет, код же программно считает столбцы, считывает значения в них ... Он же не смотрит глазами, как мы .... ? Или дело в операторе Visible ?

Посетитель

Я не объединял ячейки. Мне такие файлы приходят со стороны и я с ним работаю. И всегда макрос отлично срабатывал. А тут встал. Файлы всегда приходили с несжатыми столбцами. А тут первый раз пришёл такой, "гармошкой".

Администратор

Команда SpecialCells создаёт несколько несмежных областей, а команда Delete не умеет работать, когда ей дают несмежные фрагменты.

Посетитель

Супер. Это ж  всё ж знать надо ... Что Delete на работает "на расстоянии".