Страницы: 1
RSS
VBA. Блокировка выбора значения в ячейке в зависимости от значения в соседней ячейке
 
Приветствую, друзья! Помогите с макросом:

В столбце A  доступны к выбору 2 значения Доставка и Самовывоз
В столбце B  из выпадающего списка выбирается блок из которого необходимо забрать товар
Задача:
При выбранном значение в столбце А -"Доставка" - очистить соседнюю ячейку в столбце B  если в ней что-то записано и запретить в нее ввод значений.

То есть, если в столбце А выбрана Доставка- удаляем все из соседней ячейки и не даем туда ничего записать, а если выбрано что-то другое- выбираем что угодно.
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, повесьте макрос на изменение ячейки который будет проверять соседнюю на доставку и если доставка менять любое значение введенное на пусто
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, именно с этим у меня и затык...)) что-то не так делаю)

Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rN As Range
If Not Intersect(Target, Range("A1:A500")) Is Nothing Then
Set rN = Intersect(Target, Columns(1))
On Error Resume Next
If Len(Target.Cells.Value) = "Доставка" Then
        rN.Offset(0, 1).ClearContents
    End If

End If
End Sub
Изменено: Dyroff - 02.12.2020 13:42:28
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
В общем, с первой частью есть.
Сделал: при выборе "доставка" очищается содержимое соседнего столбца.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rN As Range
Set rN = Intersect(Target, Columns(1))
If Not Intersect(Target, Range("A1:A500")) Is Nothing Then
Set rN = Intersect(Target, Columns(1))
On Error Resume Next
If Target.Cells.Value = "Доставка" Then
        rN.Offset(0, 1).ClearContents
    End If

End If
End Sub


Как теперь запретить ввод значения во второй столбец, если в первом выбрана доставка?) Ну или при попытке что-то выбрать из выпадающего списка в столбце B, если при этом значение первого столбца =Доставка- сразу же очищать введенное значение.
Изменено: Dyroff - 02.12.2020 13:55:28
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
 
Dyroff, думаю можно короче ...
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A3:B7")) Is Nothing Then
If Target = "" Then Exit Sub
On Error Resume Next
If Target.Column = 1 And Target = "Доставка" Then
    Target.Offset(0, 1) = ""
ElseIf Target.Column = 1 And Target <> "Доставка" Then
    Exit Sub
ElseIf Target.Column = 2 And Target.Offset(0, -1) <> "Доставка" Then
  Exit Sub
ElseIf Target.Column = 2 And Target.Offset(0, -1) = "Доставка" Then
    Target = ""
End If
End If
End Sub
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, Круто! Спасибо за помощь!
Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!
Страницы: 1
Наверх