2014-05-20 2 views
-1

Я использую Excel 2007. Я хочу следующее поведение:Условная нетрудоспособность ячейки в Excel

  • Если ячейка A2 пуста или содержит значение «Create», то ячейку B2 является неактивным, и пользователь не может ввести значение ,
  • Если ячейка A2 содержит значение «Изменить» или «Уход», ячейка B2 активна, и пользователь может ввести значение.

Эти поведения должны быть ограничены их конкретными строками, поэтому ячейка B3 должна быть не подвержена влиянию значения в ячейке A2. Эти модели поведения должны быть функциональны в строках 2 до 501.

Я предполагаю, что это потребует некоторых VBA

ответ

0

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: добавлены некоторые пояснения

+0

Спасибо за это Jzz. Просто вопрос новичков, что я могу заменить в Target.Column, Target.Value и Target.Row? Итак, чтобы быть ясным, только если ячейка A2 содержит значения «Modify» или «Retire», тогда ячейка B2 должна быть активной. Во всех остальных случаях ячейка должна быть неактивной. Это поведение должно быть реплицировано для всех строк вплоть до строки 501. Я знаю, что я прошу, чтобы меня посыпали ложкой, но я узнаю об этом! Спасибо, Carlos – user2390698

+0

изменил мой ответ с некоторым объяснением – Jzz

0

В простейшим решением (но не поддающимся проверке) было бы создание проверки данных для ячейки путем перехода к данным, проверке данных и обычаю. В формуле вы можете ввести

=A2<>"Create" 

Если вы не хотите, чтобы B2 был доступен для редактирования, если A2 содержит «Создать». Затем вы можете выделить A2 и B2 и перетащить его на строку 501. Это самое быстрое решение, которое я наткнулся на него. Надеюсь, это поможет

Смежные вопросы