Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 3 След.
RSS
Защита формул от изменений, Много писалось, но хочу в надстройку свести
 
Много писалось и примеров куча, но в виде небольшой надстройки с полезными функциями не встретилось.
Задача защитить ячейки с формулами от изменений. Код внизу это решает. Но в данный код очень нужно добавить дополнительные варианты с выбором, я это вижу в виде формы и на ней комбоксы, но самостоятельно не могу реализовать. Прошу помочь.
На форме:
- поле с кодом защиты листа
- выделить заблокированные ячейки
- выделить НЕ заблокированные ячейки
- скрыть формулы


Код
Sub Защита_формул_на_листе_от_изменений() 'макродекодером записал
' работа с листом
    Cells.Select
    Selection.Locked = False
    Selection.FormulaHidden = False
'работа с диапозоном формул
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select
    Selection.Locked = True
    Selection.FormulaHidden = False 'True сделает формулы не видимыми
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    'ActiveSheet.EnableSelection = xlNoSelection 'нет разрешения на действия с ячейками
    ActiveSheet.EnableSelection = xlNoRestrictions 'разрешить выделение заблокированных и НЕ заблокированных ячеек
    'ActiveSheet.EnableSelection = xlUnlockedCells 'разрешить выделение НЕ заблокированных ячеек
    MsgBox "Формулы на листе защищены!", vbInformation, "Сообщение"
    Range("A1").Select

End Sub
Изменено: @mail.ru - 20 Окт 2013 03:11:49
 
Меняйте отображаемое имя или все Ваши темы буду удаляться/закрываться
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Если трудно с формой на которой комбоксы, то как использовать MsgBox с вопросом выбора (да/нет) ?
MsgBox - выделить заблокированные ячейки ? ...да/нет
MsgBox - выделить НЕ заблокированные ячейки ? ...да/нет
MsgBox - скрыть формулы ? ...да/нет
Изменено: Mac21 - 20 Окт 2013 18:05:56
 
А зачем там КомбоБоксы? Достаточно будет ЧекБоксов: взведён - выполняется процедура запрета, иначе разрешение.
Про MsgBox с вопросом:
Код
If MsgBox("Скрыть формулы?", vbYesNo) = vbYes Then
    'Процедура скрытия
Else
    'Процедура отображения
End If
 
Юрий спасибо. С формулами я разобрался, там два условия и все понятно. Но вот как решить вопрос с
MsgBox - выделить заблокированные ячейки ? ...да/нет
MsgBox - выделить НЕ заблокированные ячейки ? ...да/нет
Здесь получается три условия:
выделение обоих условий
НЕ выделение обоих условий
выделение одного
выделение второго - не работает вроде

P.S Вот поэтому галочки на форме с условиями удобней мне кажется, но я здесь пас...


Код
Sub Защита_формул_на_листе_от_изменений() 'макродекодером записал
' работа с листом
    Cells.Select 'выделение листа
    Selection.Locked = False 'снять галочку зищита ячеек
    Selection.FormulaHidden = False 'снять галочку скрытие формул
'работа с диапозоном формул
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select 'выделение ячеек с формулами
    Selection.Locked = True '?
 'Скрытие формул
  If MsgBox("Скрыть формулы?", vbYesNo) = vbYes Then
    Selection.FormulaHidden = True 'False сделает формулы видимыми
Else
    Selection.FormulaHidden = False 'True сделает формулы НЕ видимыми
End If

    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

' А далее как ?????????????????????????????????????? Ведь сразу три условия...
    ActiveSheet.EnableSelection = xlNoRestrictions 'разрешить выделение заблокированных и НЕ заблокированных ячеек
   'ActiveSheet.EnableSelection = xlNoSelection 'НЕ разрешать выделение заблокированных и НЕ заблокированных ячеек
   'ActiveSheet.EnableSelection = xlUnlockedCells 'разрешить выделение НЕ заблокированных ячеек
   'разрешить выделение заблокированных ячеек не ставится, или я не знаю как
   
    MsgBox "Формулы на листе защищены!", vbInformation, "Сообщение"
    Range("A1").Select

End Sub
 
Два варианта:
1.  Нарисовать форму-аналог MsgBox с тремя кнопками. На каждую кнопку свою процедуру.
2.  Всё делать на одной форме с ЧекБоксами или Радиокнопками, объединив их в группы.
 
Вернулись к ЧекБоксами на форме все таки... но как это реализовать...засада.
 
Вот Вам эскиз формы. Дальше справитесь?
 
Юрий, мне крайне не ловко, но я не справлюсь. Я юзер в самой начальной стадии. Для меня открытие было с MsgBox, а тут форму подцепить нужно... Я вот как раз сейчас на примере и учусь. Буду благодарен, если покажите готовый пример, на его основе я и буду разбираться.
Заранее спасибо.
Изменено: Mac21 - 20 Окт 2013 19:54:07
 
См. пример без Ваших конкретных процедур. Alt+F11, в Проводнике проекта (слева) клик по Forms, даблклик по Userform1, F7 - попадаем в модуль формы. Нас интересует процедура нажатия на кнопку - Private Sub CommandButton1_Click(). Последовательно проверяем состояние контролов - если ИСТИНА - выполняем нужное действие.
Добавляйте нужное количество ЧекБоксов или Радиокнопок (OptionButton), если это необходимо, и добавляйте аналогичные проверки.
P.S. Будет правильно, если Вы дадите контролам соответствующие имена (легче ориентироваться в коде - не нужно помнить, что, например, CheckBox3 - это для скрытия формул).
 
На форме выбор условий, вроде понятно, но ведь есть еще начальный процесс:
Код
' работа с листом
 Cells.Select
 Selection.Locked = False
 Selection.FormulaHidden = False

Его то как увязать с формой ?

P.S. Юрий, я начну разбираться, когда будет готов проект. Тогда я спокойно разберу каждую строку кода. Самостоятельно мне собрать форму, к моему большому ПОКА сожалению, нужна точка отсчета.
Изменено: Mac21 - 21 Окт 2013 23:10:44
 
Cells.Select выделит ВСЕ ячейки на листе. Вам нужен весь лист? Выделяйте нужный диапазон мышкой - форма загружена в таком режиме, который позволяет работать с листом.
Цитата
я начну разбираться, когда будет готов проект.
Это как понять - за Вас нужно всё сделать, а потом Вы начнёте разбираться? )) Вам бы какую-нибудь литературу почитать. А обучение выходит за рамки форума.
Точка отсчёта Вам дана - есть эскиз формы, есть скелет кода. Наполняйте то и другое.
 
Юрий, если бы я занимался макросами профессионально, я бы потратил пару дней и перечитал пару книжек по данному вопросу. Я по жизни занят другим и нет времени на изучение кодов. Максимум, я могу посмотреть готовый проект и создавать уже похожее по другим темам. Вы не правы, думая, что я плохой "студент" и ленюсь, у меня просто другая профессиональная деятельность и не готов тратить два дня на не повторяющийся вопрос в этой жизни.
Я попросил помочь собрать, Вы потратили много внимания на меня и будет бесполезно все это, если не  достигнут итог. Я повторюсь, я не разбираюсь в коде, но готов на примере попытаться (!) сделать выводы.
Изменено: Mac21 - 20 Окт 2013 21:42:39
 
Тогда зачем Вам надстройка, если одноразовую работу можно сделать без нее :)
Юрий М сделал Вам практически  70 процентов, дело осталось за малым-"привязать" куски кодов к контролам.
Самое лучшее-все делать поэтапно, используя инет и спрашивая как работает тот или иной контрол, скачивать и просматривать примеры-поверьте проффесионалом вы не станете(а может и станете), но научитесь писать макросы, пускай корявые и неуклюжие, но вам не стыдно будет обратиться на форум, потому что это делали Вы и Вам обязательно помогут, подправят и оптимизируют Ваше произведение.
 
Mac21, то что Вам это не надо, нет времени или нет желания изучать не означает, что кому-то захочется делать за Вас эту одноразовую работу, которая никому, кроме Вас не поможет. Готовы на примере сделать выводы? Мы рады за Вас. Ищите примеры. Не можете искать - может Вы тогда готовы за эти примеры при случае заплатить его автору? Ведь он их для Вас индивидуально делает.
Посмотреть готовый проект любой сможет. А вот создать свой - чего-то не у всех получается. И у большинства по той же причине, что у Вас - зачем, ведь есть форум на котором Вам все сделают. Так?
Цитата
Я попросил помочь собрать, Вы потратили много внимания на меня и будет бесполезно все это
Вы не помощи попросили - судя по переписке и Вашим словами - Вы просите сделать за Вас. Это разные вещи. И все равно будет бесполезно, т.к. форумы не для выполнения халявных заказов созданы, а для помощи в освоении предмета. А Вам освоение не нужно - Вы хотите тупо получить результат, не вникая что и как и не желая приложить своих усилий к созданию проекта. Поэтому небесполезно будет только для Вас - для Юрия фиолетово, т.к. Вы обучаться и не планируете.

Почему никто, приходя в автосервис, не говорит: "Ребят, я этим профессионально не занимаюсь - Вы мне просто сделайте, а я потом разберусь!"
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Кто нибудь из "отличников", может собрать сие чудо ?
 
Цитата
но готов на примере попытаться (!) сделать
Так я же сделал Вам пример - пытайтесь. Заготовки у Вас имеются: ваши процедуры и моя форма. Что будет не получаться - спрашивайте. Есть и другой вариант: если Вам нужно, чтобы Вам всё сделали в комплексе - закажите в платном разделе.

Цитата
если бы я занимался макросами профессионально
Я тоже не программист))
P.S. И не нужно про "отличников" - ведь отталкиваете потенциальных помощников...
 
Для меня тоже хороший урок будет, если готовое решение будет. Тяжело сразу все освоить если времени для этого нет. С учетом стиля жизни, не связанного сильно с написанием макросов, на готовых решениях учиться проще, к тому же здесь много написано, осталось это с решением совместить. Я вот сходу взялся сделать, а не получилось... :cry:
 
IvanIvanov, у Вас с Mac21 один компьютер на двоих? ))
 
Это код формы с комментарием:
Код
Private Sub CommandButton1_Click()
 If Me.CheckBox1 = True Then
 'Здесь процедура для выделения заблокированных ячеек

[B] 'Такой процедуры нет вроде, она вместе с процедурой "НЕ заблокированных ячеек" идет. Во всяком случае галочка при защите листа не ставится отдельно[/B]

 End If
 If Me.CheckBox2 = True Then
 'Здесь процедура для выделения НЕ заблокированных ячеек

[B] ActiveSheet.EnableSelection = xlUnlockedCells 'Вроде так[/B]

 End If
 If Me.CheckBox3 = True Then
 'Здесь процедура для скрытия формул
[B] Selection.FormulaHidden = True ' Или так нужно ? Selection.FormulaHidden[/B]
 End If

 If Me.OptionButton1 = True Then [B]' Что за опции ?[/B]
 'Здесь процедура для первой опции
 End If
 If Me.OptionButton2 = True Then
 'Здесь процедура для второй опции
 End If
 If Me.OptionButton3 = True Then
 'Здесь процедура для третьей опции
 End If
End Sub
Private Sub UserForm_Initialize()
 Me.OptionButton1 = True
End Sub
Изменено: Mac21 - 21 Окт 2013 23:14:44
 
Вам п. 3.3 Правил ни о чём не говорит?
 
Доброй ночи форуму!
С самого начала слежу за этой темой, в принципе неплохо иметь такую примочку в своей надстройке, частенько приходится корректировать и делать файлы с защитой их от косолапых товарищей :)
Если уважаемые модераторы не против и дабы не повторять тему, хочу присоединиться к коллективу "строителей". Начал я поэтапно, с проверки листа на наличие защиты, и завис на месте - Application.InputBox не снимает защиту с листа, поможите чем можете :D
 
А зачем Вы Type:=16 указываете? Нужна двойка. И вообще можно обойтись простым InputBox: ведь пароль - это всегда текст.
 
:D чесслово, проглядел, спасибо Юрий М, а почему...Application.InputBox - он симпатичнее смотрится, хотя я читал где-то в форуме, что он капризнее :D , ну-с приступаю к 2 части марлезонского балета :D всем доброй ночи.
 
Про капризы не слышал) А вот запись будет короче:
Код
ActiveSheet.Unprotect Password:=InputBox("Снять защиту листа:", "Пароль")
 
Спасибо за подсказку :)
Чтобы было все "по  взрослому" добавил в код проверку правильности пароля, но не пойму где "наступил на грабли"  :)  InputBox появляется по 2 раза, Msg тоже в обоих случаях выбора, хотя защиту листа снимает или не снимает правильно - где подвох (код проверки пароля выделен ===)
 
Так Вы же САМИ дважды вызываете Application.InputBox ))
 
Юрий М, добрый вечер, что то коллектив "строителей" нужной им надстройки совсем увиливает :D
С Application.InputBox разобрался, пол дня гонял Ifы и Case, но добил :D (может и корявенько), сейчас вопрос у меня в другом Selection.SpecialCells(xlCellTypeBlanks) выделяет текстовые ячейки не правильно, почему?
 
Вы хотите текстовые, а пишете xlCellTypeBlanks - пустые.
 
Пардон. не то скопировал из записанного макроса :D ,сейчас исправлю.
Поскольку ТС видимо эта надстройка не очень то и нужна, я бы хотел несколько расширить ее функциональность:
В одной Frame1 на форме будут находиться контролы для работы с ячейками содержащими формулы, а во второй Frame2 хотелось бы поместить контролы которыми можно было бы обрабатывать какие-либо двухсторонние бланки (типа одну ячейку  заполнил, другая заполняется автоматом через формулу) с текстом и формулами.
При попытке выделить в чебоксах и формулы и текст вылетает ошибка, понимаю что так нельзя, но мыслей как это обойти пока нет :)
Вопрос в том можно ли сваять и будет ли работать макрос, который будет выделять и формулы и текст для задач  во второй Frame2 (а может он уже и есть – я еще не искал).
Страницы: 1 2 3 След.
Читают тему (гостей: 1)