Добрый день! С VBA знаком очень поверхностно Столкнулся со следующей ситуацией. Необходимо сделать строку неактивной( чтобы нельзя было ничего редактировать) в зависимости от условия в другом столбце. Прикрепляю файл. В столбце Флаг, если у нас стоит Yes, то соотвествующие ячейки в первом и втором столбце должны быть доступны для редактирования. Если там стоит 'No', то надо сделать ячейки в других столбцах неактивными, чтобы нельзя было там ничего писать, и по возможности ячейки меняли цвет. Так же интересует вариант не с заблокированием ячеек, а со скрытием строки, если у нас во Флаге стоит "No"
Спасибо!
Добрый день! С VBA знаком очень поверхностно Столкнулся со следующей ситуацией. Необходимо сделать строку неактивной( чтобы нельзя было ничего редактировать) в зависимости от условия в другом столбце. Прикрепляю файл. В столбце Флаг, если у нас стоит Yes, то соотвествующие ячейки в первом и втором столбце должны быть доступны для редактирования. Если там стоит 'No', то надо сделать ячейки в других столбцах неактивными, чтобы нельзя было там ничего писать, и по возможности ячейки меняли цвет. Так же интересует вариант не с заблокированием ячеек, а со скрытием строки, если у нас во Флаге стоит "No"
Beleric3380, приветствую! Код в модуле первого листа (нужный раскомментировать/закомментить): - код блокирует ячейки с паролем "123" [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long, lr As Long
If Target.CountLarge <> 1 Then Exit Sub If Target.Column <> 5 Then Exit Sub r = Target.Row: lr = Cells(Rows.Count, 3).End(xlUp).Row ActiveSheet.Unprotect Select Case Target.Value Case "Yes" Range(Cells(r, 3), Cells(r, 4)).Locked = True Target.Locked = False Case "No" If Range(Cells(r, 3), Cells(r, 4)).Locked Then Range(Cells(r, 3), Cells(r, 4)).Locked = False End Select Range(Cells(r + 1, 3), Cells(lr + 1, 4)).Locked = False ActiveSheet.Protect Password:="123" End Sub
[/vba] -код скрывает ячейку с флагом No: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.CountLarge <> 1 Then Exit Sub If Target.Column <> 5 Then Exit Sub Select Case Target.Value Case "No" Target.EntireRow.Hidden = True End Select End Sub
[/vba]
Beleric3380, приветствую! Код в модуле первого листа (нужный раскомментировать/закомментить): - код блокирует ячейки с паролем "123" [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Long, lr As Long
If Target.CountLarge <> 1 Then Exit Sub If Target.Column <> 5 Then Exit Sub r = Target.Row: lr = Cells(Rows.Count, 3).End(xlUp).Row ActiveSheet.Unprotect Select Case Target.Value Case "Yes" Range(Cells(r, 3), Cells(r, 4)).Locked = True Target.Locked = False Case "No" If Range(Cells(r, 3), Cells(r, 4)).Locked Then Range(Cells(r, 3), Cells(r, 4)).Locked = False End Select Range(Cells(r + 1, 3), Cells(lr + 1, 4)).Locked = False ActiveSheet.Protect Password:="123" End Sub
[/vba] -код скрывает ячейку с флагом No: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.CountLarge <> 1 Then Exit Sub If Target.Column <> 5 Then Exit Sub Select Case Target.Value Case "No" Target.EntireRow.Hidden = True End Select End Sub
Здравствуйте, Еще вариант с Условным форматированием и Проверкой данных [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 5 Then With Range(Cells(Target.Row, 3), Cells(Target.Row, 4)).Validation .Delete If Target.Value = "No" Then .Add Type:=xlValidateCustom, Formula1:="=""""" .ErrorTitle = "Запрещено редактировать!" .ErrorMessage = "Ввод новых значений запрещён" & vbCrLf & "Нажмите ""ОТМЕНА""" .ShowError = True End If End With End If End Sub
[/vba] Не требует паролирования листа, но ограничение можно "обойти", если не много подумать )) З.Ы. значение не может быть отредактировано, но может быть удалено ((
Здравствуйте, Еще вариант с Условным форматированием и Проверкой данных [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 5 Then With Range(Cells(Target.Row, 3), Cells(Target.Row, 4)).Validation .Delete If Target.Value = "No" Then .Add Type:=xlValidateCustom, Formula1:="=""""" .ErrorTitle = "Запрещено редактировать!" .ErrorMessage = "Ввод новых значений запрещён" & vbCrLf & "Нажмите ""ОТМЕНА""" .ShowError = True End If End With End If End Sub
[/vba] Не требует паролирования листа, но ограничение можно "обойти", если не много подумать )) З.Ы. значение не может быть отредактировано, но может быть удалено ((boa
boa, Спасибо большое, прямо как надо, пароль на лист мне как раз необязателен. Не могу разобраться, как сделать так, чтобы при выборе "NO" шла смена цвета ячеек, у меня они всегда остаются белыми
boa, Спасибо большое, прямо как надо, пароль на лист мне как раз необязателен. Не могу разобраться, как сделать так, чтобы при выборе "NO" шла смена цвета ячеек, у меня они всегда остаются белымиBeleric3380