2 способа вы можете persue здесь, я думаю, либо защитить лист и зафиксировать те специфические клетки, основанные на которые вы указали, или вы пишете рутину для события workheet_change.
Первый довольно коварный, я думаю, поэтому я бы выбрал последний.
Что-то вроде этого, возможно?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
If Target.Value = vbNullString Then Exit Sub 'to prevent endless loops
If Cells(Target.Row, 1) = "Create" Or Cells(Target.Row, 1) = vbNullString Then
Target.Value = vbNullString
End If
End If
End Sub
Все это на листе.
Некоторое объяснение: Этот суб-вызов вызывается Excel всякий раз, когда рабочий лист изменяется (отсюда и название). Поэтому, если вы введете значение в любую ячейку, sub будет вызван, когда вы покинете ячейку (нажмите Enter или нажмите другую ячейку и т. Д.).
Аргумент Target
- это диапазон, который только что изменился.
Так что, если вы наберете 33
в ячейке B1, Target
будет Range("B1")
. Таким образом, Target.Column
- это столбец только что измененной ячейки (в данном случае 2), Target.Row
- строка (1) и Target.Value
сохраните введенное значение (33). Таким образом, Cells(Target.Row, 1)
является (в данном случае) ячейкой A1. .
Эта подпрограмма будет работать для всех строк в листе, но я уверен, что вы можете адаптировать его для проверки, какая строка является в
EDIT: добавлены некоторые пояснения
Спасибо за это Jzz. Просто вопрос новичков, что я могу заменить в Target.Column, Target.Value и Target.Row? Итак, чтобы быть ясным, только если ячейка A2 содержит значения «Modify» или «Retire», тогда ячейка B2 должна быть активной. Во всех остальных случаях ячейка должна быть неактивной. Это поведение должно быть реплицировано для всех строк вплоть до строки 501. Я знаю, что я прошу, чтобы меня посыпали ложкой, но я узнаю об этом! Спасибо, Carlos – user2390698
изменил мой ответ с некоторым объяснением – Jzz