Разблокировать ячейку по условию от соседней ячейки - PullRequest
1 голос
/ 15 апреля 2009

У меня есть два столбца, но кодирование, которое я хотел бы, оценивать из одной ячейки в другую.

В первом столбце есть ячейки, в которых есть выпадающая проверка с именами, а второй будет активирован, только если выбрано определенное имя из соседней ячейки.

Пока я нашел только этот код, но он не работает:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1").Value = "Car" Then
        Range("B1").Locked = False
    Else
        Range("B1").Locked = True
    End If
End Sub

Мне нужен этот код (например) A1: A10 и B1: B10.

Надеюсь, у меня есть смысл. Если есть способ сделать это без VBA, это было бы здорово.

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 16 апреля 2009

Параметр Target указывает диапазон, который изменяется.

Вам нужно сделать что-то вроде следующего:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range

    Set rng = Intersect(Range("A1:A10"), Target)
    If rng Is Nothing Then
        ' Not updating the range we care about
        Exit Sub
    Else
        rng.Offset(0, 1).Locked = ... whatever ...
    End If
End Sub

Обратите внимание, что целевой диапазон может быть больше одной ячейки (например, при использовании копирования / вставки), поэтому вам нужно обработать и проверить этот случай.

Calling Intersect возвращает вам пересечение целевого диапазона и диапазона, который вы хотите проверить (A1: A10 в этом примере).

Затем вы можете получить доступ к соответствующей соседней ячейке с помощью .Offset (0,1)

0 голосов
/ 16 апреля 2009

Этот фрагмент кода отлично работает для меня.

Вы поместили этот код в соответствующий WorkSheet объект? Это не сработает, если вы просто поместите его в модуль VBA. Когда вы находитесь в редакторе Visual Basic, найдите каталог в левой части экрана с надписью «Объекты Microsoft Excel». В этом каталоге должен быть WorkSheet объект для каждого листа в вашем файле. Дважды щелкните один из них, чтобы отредактировать код для этого WorkSheet. Вот куда должен идти ваш фрагмент кода.

0 голосов
/ 15 апреля 2009
Private Sub Worksheet_Change(ByVal Target As Range)

If Range("A1").Value = "Car" Then
    Range("B1").Locked = False
    Me.Unprotect ("password")
Else
    Range("B1").Locked = True
    Me.Protect ("password")
End If

End Sub

Используйте Me.Protect, чтобы метод .Locked что-то делал. Возможно, вам следует разблокировать все остальные ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...