Excel中的条件单元格禁用

时间:2014-05-20 15:42:44

标签: excel vba excel-vba excel-2007

我正在使用Excel 2007.我想要以下行为:

  • 如果单元格A2为空或包含值"创建"然后单元格B2处于非活动状态,用户无法输入值。
  • 如果单元格A2包含值"修改"或"退休"然后单元格B2处于活动状态,用户可以输入值。

这些行为需要限制在特定的行中,因此单元格B3需要不受单元格A2中的值的影响。这些行为需要在第2行到第501行中起作用。

我想这需要一些VBA

2 个答案:

答案 0 :(得分:0)

你可以在这里坚持2种方法我想,要么保护工作表并根据你陈述的条件锁定那些特定的单元格,要么为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都会调用此子程序。因此,如果您在任何单元格中键入值,则在离开单元格时会调用该子句(按Enter键或单击另一个单元格等)。

sub中的Target参数是刚刚更改的范围。

因此,如果您在单元格B1中输入33,则Target将为Range("B1")。因此Target.Column是刚更改的单元格的列(在本例中为2),Target.Row是行(1),Target.Value保存您刚刚输入的值(33) 。所以Cells(Target.Row, 1)(在这种情况下)是单元格A1。

此子句适用于工作表中的所有行,但我确信您可以对其进行调整以检查它所在的行。


编辑:添加了一些解释

答案 1 :(得分:0)

最简单的解决方案(但不是失败证明)是通过转到数据,数据验证和自定义来为单元创建数据验证。在公式输入中,您可以输入

=A2<>"Create"

如果您不希望B2可编辑,如果A2包含“创建”。然后你可以突出显示A2和B2并将其向下拖动到第501行。这是我偶然发现的最快的解决方案。希望这有帮助