Страницы: 1
RSS
Удалить значений из всех незащищенных ячеек в не скрытых листах книги
 
интересует такой вот вопрос
Как удалить значения из всех незащищенных ячеек в не скрытых листах книги
 
Так же интересует что именно не получилось при самостоятельной реализации задачи.
Алгоритм прост: цикл по всем листам -проверяем свойство Visible и если True - цикл по ячейкам UsedRange с проверкой свойства Locked.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Но мне кажется такой макрос будет долго работать

Код
Sub Очистить_незащищённые_ячейки_на_всех_видимых_листах()
 Dim Sht As Worksheet, Rng As Range, iCell As Range

    If MsgBox("Очистить все данные в незащищённых ячейках на всех видимых листах активной книги?", vbQuestion + vbYesNo, "Внимание") = vbNo Then Exit Sub
    Application.ScreenUpdating = False
    For Each Sht In ActiveWorkbook.Worksheets
        If Sht.Visible = xlSheetVisible Then
            Set Rng = Sht.UsedRange
            For Each iCell In Rng
                If iCell.Locked = False Then iCell.Value = Empty
            Next iCell
        End If
    Next Sht
    Application.ScreenUpdating = True
    MsgBox "Данные в незащищённых ячейках очищены!", vbInformation, "Конец"
End Sub
Изменено: New - 03.09.2020 17:37:35
 
Можно ускорить, если очищать ячейку не сразу, а сначала запоминать в некий временный диапазон через Union.
Плюс, плохая практика очищаться через назначение .Value = "". Это строка нулевой длины и мало общего с пустой ячейкой имеет. Лучше так:
Код
iCell.Value = Empty
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
изменил. А у Union есть ограничение по кол-ву объединяющих диапазонов? То есть можно ли через Union объединить например, 5 млн диапазонов/ячеек? Сам не тестировал Union
Изменено: New - 03.09.2020 14:33:02
 
Дмитрий(The_Prist) Щербаков, легко сказать, когда соображаешь :) алгоритм конечно понятен, с воплощением не очень :(

Спасибо всем БОЛЬШОЕ! вопрос снят...не снят...макрос действует только на активный лист
Изменено: vaspup88 - 03.09.2020 17:27:07
 
А Вы макрос из #4 попробовали?
Владимир
 
sokol92, да, все супер...поторопился...незащищенные ячейки очищаются только на активном листе
Изменено: vaspup88 - 03.09.2020 17:29:45
 
поправил

Код
Sub Очистить_незащищённые_ячейки_на_всех_видимых_листах()
 Dim Sht As Worksheet, Rng As Range, iCell As Range
 
    If MsgBox("Очистить все данные в незащищённых ячейках на всех видимых листах активной книги?", vbQuestion + vbYesNo, "Внимание") = vbNo Then Exit Sub
    Application.ScreenUpdating = False
    For Each Sht In ActiveWorkbook.Worksheets
        If Sht.Visible = xlSheetVisible Then
            Set Rng = Sht.UsedRange
            For Each iCell In Rng
                If iCell.Locked = False Then iCell.Value = Empty
            Next iCell
        End If
    Next Sht
    Application.ScreenUpdating = True
    MsgBox "Данные в незащищённых ячейках очищены!", vbInformation, "Конец"
End Sub
Изменено: New - 03.09.2020 17:38:40
 
New, теперь работает :) спасибо
 
а как сделать, чтобы допустим на листе 3, значения в ячейках столбца О не очищались? а во всех других видимых листах очищались
Изменено: vaspup88 - 04.09.2020 21:23:23
 
1. Выделить столбец О на листе 3, нажать правую клавишу мыши - Формат ячеек - Защита - поставить галочка Защищаемая ячейка.
2. Запустить макрос
 
New, если бы все было так просто :) я имел в виду, что на листе 3 есть столбец незащищенных ячеек, которые не надо очищать как все остальные..

видимо это довольно проблемно воплотить :)
Изменено: vaspup88 - 07.09.2020 20:14:31
Страницы: 1
Наверх