Страницы: 1
RSS
Установка пароля и снятие при активации Checkbox
 
Добрый день.

есть страница excel , на странице установлены checkbox ( несколько )
если установить пароль на эту страницу то checkbox нельзя будет активировать будет ругаться
Пароль на страницу необходимо ставить чтобы не изменять другие данные

как реализовать макрос чтобы при активации или деактивации checkbox пароль снимался или ставился
P.S если использовать макрос плана :
Код
ActiveSheet.Unprotect Password:="test"
ActiveSheet.Protect Password:="test"

то происходит задерка в работе такого макроса
 
Цитата
Homavi написал: если установить пароль на эту страницу то checkbox нельзя будет активировать будет ругаться
Смотря как установить
В модуль листа
Код
Private Sub CheckBox1_Click()
If Me.CheckBox1 Then
    Me.Protect Password:="123", DrawingObjects:=False
Else
    Me.Unprotect Password:="123"
End If
End Sub
Изменено: Sanja - 26.02.2018 18:40:34
Согласие есть продукт при полном непротивлении сторон
 
Sanja, забыл уточнить , при нажатии на макрос , идет заполненеи ячеек
Код
If CheckBox1 = True Then
Sheets("2").Range("U7") = 1
Sheets("2").Range("V7") = 2
Sheets("2").Range("W7") = 3
End If

И как я уже сказал таких checkbox много, можно ли какт о прописать чтобы для каждоого checkbox не прописывать данный код

Изменено: Homavi - 26.02.2018 18:46:19
 
Цитата
Homavi написал: при нажатии на макрос
Ух ты! Новшество! Макрос, срабатывающий при определенном давлении :)

Сняли пароль, заполнили ячейки, поставили пароль.
 
Так Вам что нужно? При установке ЧекБокса в положение ВКЛ, что должно происходить?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, если активен checkbox заполнить ячейке, если деактивирован удалить все из ячеке
и при этом чтобы лист всегда был под паролем )

У меня получился макрос, но он большой и там много "ваты"
 
Цитата
Homavi написал: checkbox много, можно .. для каждоого checkbox не прописывать данный код
Можно. Работа с КЛАССАМИ
Согласие есть продукт при полном непротивлении сторон
 
Sanja, а можно пример :-)
извините за наглость _))))
 
Можно. Хотя по ссылки есть пример с ТекстБоксами
Пароль на лист (Лист1) устанавливается при открытии файла и не зависит от состояния ЧекБоксов на нем
В Модуль Эта книга
Код
Private Sub Workbook_Open()
Dim objOLE As OLEObject, I&
On Error Resume Next
ReDim arrChBx(1 To Worksheets("Лист1").OLEObjects.Count)
Worksheets("Лист1").Protect Password:="123", DrawingObjects:=False
For Each objOLE In Worksheets("Лист1").OLEObjects
    If TypeOf objOLE.Object Is MSForms.CheckBox Then
        I = I + 1
        Set arrChBx(I).iChBx = objOLE.Object
    End If
Next
End Sub
В Общий(стандартный) модуль
Код
Public arrChBx() As New clsChBx
В модуль Класса (имя модуля clsChBx)
Код
Public WithEvents iChBx As MSForms.CheckBox

Private Sub iChBx_Click()
Dim arr(), iRng As Range
On Error Resume Next
With Worksheets("Лист1")
    Select Case iChBx.Caption
        Case "Диапазон1"
            Set iRng = .Range("G1:I1")
            arr = Array(1, 2, 3)    'данные для 1-го диапазона
        Case "Диапазон2"
            Set iRng = .Range("G3:I3")
            arr = Array(10, 20, 30) 'данные для 2-го диапазона
        Case "Диапазон3"
            Set iRng = .Range("G5:I5")
            arr = Array(11, 12, 13) 'данные для 3-го диапазона
        Case "Диапазон4"
            Set iRng = .Range("G7:I7")
            arr = Array(15, 21, 31) 'данные для 4-го диапазона
        Case "Диапазон5"
            Set iRng = .Range("G9:I9")
            arr = Array(100, 200, 300)  'данные для 5-го диапазона
    End Select
    If iChBx Then
        iRng = arr
        MsgBox "Заполнен диапазон " & iRng.Address
    Else
        iRng.ClearContents
        MsgBox "Диапазон " & iRng.Address & " очищен!"
    End If
End With
Erase arr
Set iRng = Nothing
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо ))) работает ))

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

Допустим Диапазон1 должен использовать значение из ячейки D1 ( первое что в голову пришло )
Но чтобы не увеличивать сам код макроса, так как checkbox много будет, поставить постоянное значение - константу ))
И их будет несколько )))

Буду рад если получится сделать )))
 
Цитата
Homavi написал: Допустим...
Зачем 'допуски'? Файл-пример. Как есть - Как надо
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Я написал на листе справо значения для каждолго диапазона.

Как их мозжно прописать в самом макросе - использовать const
 
Цитата
Homavi написал: использовать const
Использовать Const и одновременно брать значения с листа не получится. Вариант может быть такой. В модуле класса
Код
'.............    
Select Case iChBx.Caption
    Case "Диапазон1"
        Set iRng = .Range("G1:I1")
        arr = .Range("Q1:S1").Value 'данные для 1-го диапазона
    Case "Диапазон2"
        Set iRng = .Range("G3:I3")
        arr = .Range("Q2:S2").Value 'данные для 2-го диапазона
    ' далее по аналогии
'.............
Согласие есть продукт при полном непротивлении сторон
 
Sanja, спасибо )) буду пробовать
 
Sanja, вопрос, а можно ли прописать в самой const место откуда он будет брать значение ?
если да то можно пример )))
 
В коде из сообщения #9 значения для диапазонов прописаны внутри него. Или я не понимаю чего Вы хотите
Согласие есть продукт при полном непротивлении сторон
 
Приведу свой корявый код который я использовал до этого
Код
Private Sub CheckBox3_Click()
ActiveSheet.Unprotect Password:="123"x= Sheets("index").Range("f5")
y = Sheets("index").Range("f6")
z = Sheets("index").Range("f7")If CheckBox3 = True Then
CheckBox24 = FalseSheets("test1").Range("U9") = x
Sheets("test1").Range("V9") = y
Sheets("test1").Range("W9") = z
End If
If CheckBox3 = False Then
Sheets("test1").Range("U9:W9").ClearContents
ActiveSheet.Protect Password:="123"End If
End Sub

Я понимаю что сам код большой, и хотелось чтобы прописать это все где то в начале модуля допустим const и дальше уже писать какое значение куда вставлять чтобы убрать лишний код

И как раз к этому я хочу прописать чтобы при активации чек бокса был пароль))

 
Sanja, есть идея по последнему сообщению ? )))
 
У меня  нет, потому что я так и не понял что Вы хотите. Может кто другой, посмышленее меня, поможет  
Согласие есть продукт при полном непротивлении сторон
 
Sanja, в последнем посте я написал код который я использую ( он корявый но работает :-D )

y и z я прописал откуда брать значение и далее я уже прописываю условия для активации чекбокса
но проблема в том что у меня чек боксов много и в каждом писать y и z это слишком тяжело и много кода получается (((

как бы в шапке прописать все const для y и z

и прикрутить сюда же код для снятие и установки пароля
 
Цитата
Homavi написал: в последнем посте я написал код который я использую
А я еще в 9-м посте написал код и приложил пример (по Вашей просьбе) как решить проблему
Цитата
Homavi написал: но проблема в том что у меня чек боксов много...
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Homavi написал: прикрутить сюда же код для снятие и установки пароля
и этот вопрос там же освещен
Согласие есть продукт при полном непротивлении сторон
 
Sanja, извините ))) буду пытаться прикрутить.
Возможно я уже сам запутался ;-(
 
Sanja, вопрос еще открыт )))

после установки пароля все равно идет редактирование листа
то есть не понятно за что пароль отвечает :-(
Изменено: Homavi - 12.03.2018 01:03:57
 
Sanja, есть решение ?
Пароль ставится но страницу не защищает
 
Попробуйте так..
Страницы: 1
Наверх