Столкнулся с ситуацией, когда макросом надо получить список диапазонов всех защищённых ячеек на листе, без перебора ячеек в цикле. Лист может быть большой, защита может стоять на нескольких отдельных диапазонах (отдельные ячейки, диапазоны, столбцы), ячейки могут быть пустые или заполненные. Задача: в переменную считать адрес всех этих диапазонов, как это позволяет делать, например, SpecialCells res = cells.SpecialCells(xlCellTypeConstants).Address
Для чего нужно: на листе защищены часть ячеек, но надо временно поставить защиту на весь лист, а потом снять защиту, но чтобы ранее защищённые ячейки остались защищены.
В объектной модели Excel ничего такого не нашёл. Есть идеи?
<добавлено> Нагуглил вариант поиска (Cells.Find) по формату ячейки, там можно найти защищённые ячейки, - но когда защищён столбец целиком, всё это дело виснет, - т.к. видно, что Excel в этом случае перебирает отдельные ячейки (пишет, что найдено 1048593 ячейки, - и висит 5 минут, т.к. не может сразу отобразить результаты поиска) Да и не очень понятно, как поиском найти и пустые и заполненные ячейки одновеременно
...надо временно поставить защиту на весь лист, а потом снять защиту, но чтобы ранее защищённые ячейки остались защищены.
Как вариант, можно запоминать форматы (включая защиту) ячеек контролируемого диапазона на вспомогательном листе, а потом восстанавливать их на рабочем листе. Например: Запомнить: