Приветствую участников форума! Пытаюсь доказать коллегам преимущество Excel над, не улыбайтесь, бумажными журналами. Составляю за них таблицы, произвожу хронометраж отдельных видов работ для сравнения, и т.д. Тщетно, народу много, обязательно кто-нибудь, своими кривыми действиями все испортит. Проверка данных и скрытые диапазоны уже не помогают. Все же надеюсь на возможности Excel и вашу помощь. Необходимо чтобы при занесении значения в определенную ячейку, данная ячейки и соседние, ограниченные диапазоном, приобретали свойство "защищаемая ячейка". Описание проблемы продублированно в прилагаемом примере. Вероятнее всего решение макросом, но я не очень удивлюсь если кто-нибудь найдет решение формулами. От Excel можно ожидать чего угодно. Заранее благодарен.
Приветствую участников форума! Пытаюсь доказать коллегам преимущество Excel над, не улыбайтесь, бумажными журналами. Составляю за них таблицы, произвожу хронометраж отдельных видов работ для сравнения, и т.д. Тщетно, народу много, обязательно кто-нибудь, своими кривыми действиями все испортит. Проверка данных и скрытые диапазоны уже не помогают. Все же надеюсь на возможности Excel и вашу помощь. Необходимо чтобы при занесении значения в определенную ячейку, данная ячейки и соседние, ограниченные диапазоном, приобретали свойство "защищаемая ячейка". Описание проблемы продублированно в прилагаемом примере. Вероятнее всего решение макросом, но я не очень удивлюсь если кто-нибудь найдет решение формулами. От Excel можно ожидать чего угодно. Заранее благодарен.Мур
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub If Target.Cells = "x" Then Range("B" & Target.Row & ":Q" & Target.Row).Locked = True Else: Range("B" & Target.Row & ":Q" & Target.Row).Locked = False End If End Sub
[/vba]
примерно так: в модуль листа [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub If Target.Cells = "x" Then Range("B" & Target.Row & ":Q" & Target.Row).Locked = True Else: Range("B" & Target.Row & ":Q" & Target.Row).Locked = False End If End Sub
Хоть Даулет уже и написал практически то же самое, но вот так будет намного короче, да и что-нибудь ещё можно будет по событию Worksheet_Change обработать: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then Range("B" & Target.Row & ":Q" & Target.Row).Locked = UCase(Target.Value) = "X" End Sub
[/vba]
К стати, Мурат, Х как букву-метку Вы выбрали совсем не удачно - она одинаково выглядит что в русской, что в латинской раскладке и фиг поймёшь, что надо вводить на лист чтобы ячейки залочились.
Хоть Даулет уже и написал практически то же самое, но вот так будет намного короче, да и что-нибудь ещё можно будет по событию Worksheet_Change обработать: [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 4 Then Range("B" & Target.Row & ":Q" & Target.Row).Locked = UCase(Target.Value) = "X" End Sub
[/vba]
К стати, Мурат, Х как букву-метку Вы выбрали совсем не удачно - она одинаково выглядит что в русской, что в латинской раскладке и фиг поймёшь, что надо вводить на лист чтобы ячейки залочились.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Суббота, 01.12.2012, 22:40
UCase(Target.Value) like "[XХ]" причем там одна буква Х - русская, а вторая - X - латинская
ну, Вы, батенька, и садист! Ну, тогда ещё один маленький штрих к этой бяке для начинающих - на смеси одинаковых рус-лат пароль на VBA-проект поставить.
Quote (ikki)
UCase(Target.Value) like "[XХ]" причем там одна буква Х - русская, а вторая - X - латинская
ну, Вы, батенька, и садист! Ну, тогда ещё один маленький штрих к этой бяке для начинающих - на смеси одинаковых рус-лат пароль на VBA-проект поставить.Alex_ST
Приветствую Даулет, Алексей и ikki, а так же остальных участников форума. Спасибо за помощь, оба кода, предложенных Даулетом и Алексеем работают исправно. Вопрос к Даулету, что значит [vba]
[/vba] У меня работает и без этой строчки. Прокоментируйте, если не сложно. И еще, вопрос ко всем: прежде чем выполнить макрос мне надо снять защиту [vba]
Code
ActiveSheet.Unprotect
[/vba], а по завершении изменении свойства диапазона снова защитить лист [vba]
Code
ActiveSheet.Protect
[/vba], как прописать пароль, не могу разобраться.
Приветствую Даулет, Алексей и ikki, а так же остальных участников форума. Спасибо за помощь, оба кода, предложенных Даулетом и Алексеем работают исправно. Вопрос к Даулету, что значит [vba]
[/vba] У меня работает и без этой строчки. Прокоментируйте, если не сложно. И еще, вопрос ко всем: прежде чем выполнить макрос мне надо снять защиту [vba]
Code
ActiveSheet.Unprotect
[/vba], а по завершении изменении свойства диапазона снова защитить лист [vba]
Code
ActiveSheet.Protect
[/vba], как прописать пароль, не могу разобраться.Мур
Мурат, 1. Даулет таким образом отключал защиту ячеек когда введено не Х. У меня это тоже сделано, просто одной операцией. 2. А у Вас что, макрорекордер сломался? Ну, нужно же и самому пробовать, а потом уже спрашивать.
Мурат, 1. Даулет таким образом отключал защиту ячеек когда введено не Х. У меня это тоже сделано, просто одной операцией. 2. А у Вас что, макрорекордер сломался? Ну, нужно же и самому пробовать, а потом уже спрашивать.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Понедельник, 03.12.2012, 16:46
Alex_ST, Я как раз и пробовал макрорекордером, но он почему-то не отображает введенный пароль, в этом сложность была. Сейчас прописал вручную - работает.
Alex_ST, Я как раз и пробовал макрорекордером, но он почему-то не отображает введенный пароль, в этом сложность была. Сейчас прописал вручную - работает.Мур
Alex_ST, опаздываю с ответами. Нет, не надо. Должно работать так: Изначально файл защищен на пароль, все ячейки "незащищаемые", т.е. доступны для редактирования. После ввода данных в определенную ячейку, заданный диапазон, в данном случае кусок строки, приобретает значение "защищаемая ячейка". Это, чтобы пользователи не мошенничали. Редактирование и удаление произвожу я сам, после того как снимаю с пароля.
Alex_ST, опаздываю с ответами. Нет, не надо. Должно работать так: Изначально файл защищен на пароль, все ячейки "незащищаемые", т.е. доступны для редактирования. После ввода данных в определенную ячейку, заданный диапазон, в данном случае кусок строки, приобретает значение "защищаемая ячейка". Это, чтобы пользователи не мошенничали. Редактирование и удаление произвожу я сам, после того как снимаю с пароля.Мур
Сообщение отредактировал Мур - Понедельник, 03.12.2012, 17:09