Страницы: 1
RSS
Двухуровневая блокировка ячеек, Блокировка определённых ячеек уже на защищённом листе
 
Всем привет!
Есть небольшая задачка и не знаю как с ней справиться. Искала на форуме, но не нашла решение :(
Есть уже защищённый лист с заблокированными на редактирование ячейками. На некоторые из оставшихся достсупных для редактирования ячейках нужно сделать также блокировку на редактирование, но при усовии, если в чекбоксе (на этом же листе) поставлена галочка. Поставить или снять галочку на чекбоксе можно только введя пароль (отличающийся от пароля для снятия защиты этого листа) в появляющемся инпутбоксе.
Получается есть три типа ячеек на листе:
1. которые никто не может редактировать (Лист защищён);
2. которые можно редактировать при отсутствии галочки на чекбоксе;
3. которые можно редактировать в любом случае.

Подскажите, пожалуйста, кто знает решение.
Изменено: AnastaciaKomp - 14.11.2023 20:54:21
 
AnastaciaKomp, Вариант, попробуйте:
Вредить легко, помогать трудно.
 
И вам привет AnastaciaKomp,
второй пункт можно реализовать с помощью проверки данных (с остальными пунктами, думаю, вопросов нет?)
Данные -- Проверка данных -- Другой -- В поле для формулы:   =НЕ($C$1)    (в C1 связь с чекбоксом к примеру)
 
Behruz A.N., спасибо за помощь!
Но это немного не то, что я хотела.
Здесь чекбокс связан с защитой листа. А у меня задача, чтобы было как бы два уровня защиты:
1. Стандартная защита ячеек (через "Защиту листа" во вкладке "Рецензирование");
2. Защита ячеек, если стоит галочка в чекбоксе, которую можно снять/поставить, введя пароль в появляющемся инпутбоксе.
И эти две защиты никак не должны быть связаны друг с другом. Разные пароли, галочка/отсутствие её в чекбоксе никак не должно влиять на стандартную защиту листа (п.1), ...

Павел \Ʌ/, да, но как можно сделать так, чтобы галочку на чекбоксе можно было снять/поставить только введя пароль в появляющемся инпутбоксе?
Вы знаете решение? :)
 
Павел \Ʌ/, не совсем. Защита листа сразу вносит поправки , а с учетом что даже на защищенном листе незащищенные ячейки можно перетащить, то совсем беда. решение с объединением поможет, но вот чекбокс, да еще с паролем без макроса не обойдется.
По вопросам из тем форума, личку не читаю.
 
БМВ, а вы знаете как это можно сделать с помощью макроса?
Может быть есть какой-нибудь пример или аналог, чтобы я самостоятельно допилила под себя?
 
Нашёл похожую тему на форуме: Установка пароля и снятие при активации Checkbox
Там нет решения по конкретно вашей задаче, но, возможно, в купе с вышеперечисленными сообщениями вам удастся справиться с дилеммой :)
Изменено: Alexander - 16.11.2023 17:29:41
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rr As Range
    Set rr = Intersect(ActiveSheet.UsedRange, Target)
    If Not rr Is Nothing Then
        Dim cl As Range
        For Each cl In rr.Cells
            If cl.Locked = False Then
                If ActiveSheet.CheckBoxes(1).Value <> 1 Then
                    Application.EnableEvents = False
                    Application.Undo
                    Application.EnableEvents = True
                    Exit For
                End If
            End If
        Next
    End If
End Sub
 
МатросНаЗебре, спасибо за помощь, но подскажите как это работает? :)
В коде не вижу где задаётся пароль на чекбокс..и нет инпут бокса..(
Или вы прислали пример реализации какого-то отдельного куска моей задачки? :)
 
Вставьте код в модуль листа, правой кнопкой клик на ярлычке листа - Исходный текст.
Инпут бокса пока нет.
 
МатросНаЗебре, код в модуль листа вставила.


но вот здесь не поняла, что нужно сделать и где "исходный текст".
Цитата
правой кнопкой клик на ярлычке листа - Исходный текст
 
Если в модуль листа вставили, то "исходный текст" Вам уже не нужен.
 
Вставьте код в стандартный модуль, в стандартный, не в модуль листа.
Назначьте чекбоксу этот макрос.
При щелчке на чекбокс будет появляться запрос пароля.
Код
Sub Флажок1_Щелчок()
    If ActiveSheet.CheckBoxes(1).Value = 1 Then
        Dim password As String
        password = InputBox("Введите пароль", "Двухуровневая блокировака ", "Том Круз, висящий на тросе.")
        If password <> "Том" Then
            ActiveSheet.CheckBoxes(1).Value = False
        End If
    End If
End Sub
 
МатросНаЗебре, спасибо большое! Заработало!
Подскажите, пожалуйста, а как сделать так, чтобы спрашивал пароль и на отключение галочки?
Сделала так, пароль спрашивает, но даже если просто закрыть всплывающий инпутбокс, не вводя пароль, то галочка всё равно снимается :(
Код
Sub Флажок1_Щелчок()
    Dim password As String
    password = InputBox("Введите пароль", "Двухуровневая блокировака ", "Том Круз, висящий на тросе.")
        If ActiveSheet.CheckBoxes(1).Value = 1 Then
            If password <> "Том" Then
                ActiveSheet.CheckBoxes(1).Value = False
            End If
        End If
        If ActiveSheet.CheckBoxes(1).Value = 0 Then
            If password <> "Том" Then
                ActiveSheet.CheckBoxes(1).Value = False
            End If
        End If
End Sub
 
Код
Sub Флажок1_Щелчок()
    Dim password As String
    password = InputBox("Введите пароль", "Двухуровневая блокировака ", "Том Круз, висящий на тросе.")
    If password <> "Том" Then
        With ActiveSheet.CheckBoxes(1)
            .Value = -4145 - .Value
        End With
    End If
End Sub
 
МатросНаЗебре, спасибо!
Но получается, что если в Формате ячейки снята галочка "Защищаемая ячейка", то я вообще не могу в неё ввести какое-либо значение :(
 
Надо как-то макросу дать понять, что ячейки относятся к другому типу проверки блокировки.
Например, можно выделить цветом. Тогда макрос примет вид:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rr As Range
    Set rr = Intersect(ActiveSheet.UsedRange, Target)
    If Not rr Is Nothing Then
        Dim cl As Range
        For Each cl In rr.Cells
            If cl.Locked = False Then
                If cl.Interior.Color <> RGB(220, 220, 255) Then
                    If ActiveSheet.CheckBoxes(1).Value <> 1 Then
                        Application.EnableEvents = False
                        Application.Undo
                        Application.EnableEvents = True
                        Exit For
                    End If
                End If
            End If
        Next
    End If
End Sub
 
МатросНаЗебре, Супер! Всё заработало! Спасибо большое!!
Страницы: 1
Наверх