Много писалось и примеров куча, но в виде небольшой надстройки с полезными функциями не встретилось. Задача защитить ячейки с формулами от изменений. Код внизу это решает. Но в данный код очень нужно добавить дополнительные варианты с выбором, я это вижу в виде формы и на ней комбоксы, но самостоятельно не могу реализовать. Прошу помочь. На форме: - поле с кодом защиты листа - выделить заблокированные ячейки - выделить НЕ заблокированные ячейки - скрыть формулы
Код
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
Если трудно с формой на которой комбоксы, то как использовать MsgBox с вопросом выбора (да/нет) ? MsgBox - выделить заблокированные ячейки ? ...да/нет MsgBox - выделить НЕ заблокированные ячейки ? ...да/нет MsgBox - скрыть формулы ? ...да/нет
Юрий спасибо. С формулами я разобрался, там два условия и все понятно. Но вот как решить вопрос с 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, а тут форму подцепить нужно... Я вот как раз сейчас на примере и учусь. Буду благодарен, если покажите готовый пример, на его основе я и буду разбираться. Заранее спасибо.
См. пример без Ваших конкретных процедур. Alt+F11, в Проводнике проекта (слева) клик по Forms, даблклик по Userform1, F7 - попадаем в модуль формы. Нас интересует процедура нажатия на кнопку - Private Sub CommandButton1_Click(). Последовательно проверяем состояние контролов - если ИСТИНА - выполняем нужное действие. Добавляйте нужное количество ЧекБоксов или Радиокнопок (OptionButton), если это необходимо, и добавляйте аналогичные проверки. P.S. Будет правильно, если Вы дадите контролам соответствующие имена (легче ориентироваться в коде - не нужно помнить, что, например, CheckBox3 - это для скрытия формул).
На форме выбор условий, вроде понятно, но ведь есть еще начальный процесс:
Код
' работа с листом
Cells.Select
Selection.Locked = False
Selection.FormulaHidden = False
Его то как увязать с формой ?
P.S. Юрий, я начну разбираться, когда будет готов проект. Тогда я спокойно разберу каждую строку кода. Самостоятельно мне собрать форму, к моему большому ПОКА сожалению, нужна точка отсчета.
Cells.Select выделит ВСЕ ячейки на листе. Вам нужен весь лист? Выделяйте нужный диапазон мышкой - форма загружена в таком режиме, который позволяет работать с листом.
Цитата
я начну разбираться, когда будет готов проект.
Это как понять - за Вас нужно всё сделать, а потом Вы начнёте разбираться? )) Вам бы какую-нибудь литературу почитать. А обучение выходит за рамки форума. Точка отсчёта Вам дана - есть эскиз формы, есть скелет кода. Наполняйте то и другое.
Юрий, если бы я занимался макросами профессионально, я бы потратил пару дней и перечитал пару книжек по данному вопросу. Я по жизни занят другим и нет времени на изучение кодов. Максимум, я могу посмотреть готовый проект и создавать уже похожее по другим темам. Вы не правы, думая, что я плохой "студент" и ленюсь, у меня просто другая профессиональная деятельность и не готов тратить два дня на не повторяющийся вопрос в этой жизни. Я попросил помочь собрать, Вы потратили много внимания на меня и будет бесполезно все это, если не достигнут итог. Я повторюсь, я не разбираюсь в коде, но готов на примере попытаться (!) сделать выводы.
Тогда зачем Вам надстройка, если одноразовую работу можно сделать без нее Юрий М сделал Вам практически 70 процентов, дело осталось за малым-"привязать" куски кодов к контролам. Самое лучшее-все делать поэтапно, используя инет и спрашивая как работает тот или иной контрол, скачивать и просматривать примеры-поверьте проффесионалом вы не станете(а может и станете), но научитесь писать макросы, пускай корявые и неуклюжие, но вам не стыдно будет обратиться на форум, потому что это делали Вы и Вам обязательно помогут, подправят и оптимизируют Ваше произведение.
Mac21, то что Вам это не надо, нет времени или нет желания изучать не означает, что кому-то захочется делать за Вас эту одноразовую работу, которая никому, кроме Вас не поможет. Готовы на примере сделать выводы? Мы рады за Вас. Ищите примеры. Не можете искать - может Вы тогда готовы за эти примеры при случае заплатить его автору? Ведь он их для Вас индивидуально делает. Посмотреть готовый проект любой сможет. А вот создать свой - чего-то не у всех получается. И у большинства по той же причине, что у Вас - зачем, ведь есть форум на котором Вам все сделают. Так?
Цитата
Я попросил помочь собрать, Вы потратили много внимания на меня и будет бесполезно все это
Вы не помощи попросили - судя по переписке и Вашим словами - Вы просите сделать за Вас. Это разные вещи. И все равно будет бесполезно, т.к. форумы не для выполнения халявных заказов созданы, а для помощи в освоении предмета. А Вам освоение не нужно - Вы хотите тупо получить результат, не вникая что и как и не желая приложить своих усилий к созданию проекта. Поэтому небесполезно будет только для Вас - для Юрия фиолетово, т.к. Вы обучаться и не планируете.
Почему никто, приходя в автосервис, не говорит: "Ребят, я этим профессионально не занимаюсь - Вы мне просто сделайте, а я потом разберусь!"
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Так я же сделал Вам пример - пытайтесь. Заготовки у Вас имеются: ваши процедуры и моя форма. Что будет не получаться - спрашивайте. Есть и другой вариант: если Вам нужно, чтобы Вам всё сделали в комплексе - закажите в платном разделе.
Цитата
если бы я занимался макросами профессионально
Я тоже не программист)) P.S. И не нужно про "отличников" - ведь отталкиваете потенциальных помощников...
Для меня тоже хороший урок будет, если готовое решение будет. Тяжело сразу все освоить если времени для этого нет. С учетом стиля жизни, не связанного сильно с написанием макросов, на готовых решениях учиться проще, к тому же здесь много написано, осталось это с решением совместить. Я вот сходу взялся сделать, а не получилось...
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
Доброй ночи форуму! С самого начала слежу за этой темой, в принципе неплохо иметь такую примочку в своей надстройке, частенько приходится корректировать и делать файлы с защитой их от косолапых товарищей Если уважаемые модераторы не против и дабы не повторять тему, хочу присоединиться к коллективу "строителей". Начал я поэтапно, с проверки листа на наличие защиты, и завис на месте - Application.InputBox не снимает защиту с листа, поможите чем можете
чесслово, проглядел, спасибо Юрий М, а почему...Application.InputBox - он симпатичнее смотрится, хотя я читал где-то в форуме, что он капризнее , ну-с приступаю к 2 части марлезонского балета всем доброй ночи.
Спасибо за подсказку Чтобы было все "по взрослому" добавил в код проверку правильности пароля, но не пойму где "наступил на грабли" InputBox появляется по 2 раза, Msg тоже в обоих случаях выбора, хотя защиту листа снимает или не снимает правильно - где подвох (код проверки пароля выделен ===)
Юрий М, добрый вечер, что то коллектив "строителей" нужной им надстройки совсем увиливает С Application.InputBox разобрался, пол дня гонял Ifы и Case, но добил (может и корявенько), сейчас вопрос у меня в другом Selection.SpecialCells(xlCellTypeBlanks) выделяет текстовые ячейки не правильно, почему?
Пардон. не то скопировал из записанного макроса ,сейчас исправлю. Поскольку ТС видимо эта надстройка не очень то и нужна, я бы хотел несколько расширить ее функциональность: В одной Frame1 на форме будут находиться контролы для работы с ячейками содержащими формулы, а во второй Frame2 хотелось бы поместить контролы которыми можно было бы обрабатывать какие-либо двухсторонние бланки (типа одну ячейку заполнил, другая заполняется автоматом через формулу) с текстом и формулами. При попытке выделить в чебоксах и формулы и текст вылетает ошибка, понимаю что так нельзя, но мыслей как это обойти пока нет Вопрос в том можно ли сваять и будет ли работать макрос, который будет выделять и формулы и текст для задач во второй Frame2 (а может он уже и есть – я еще не искал).