如何根据先前的输入禁用单元格

时间:2011-12-01 17:10:51

标签: excel vba

我正在尝试在excel中创建一个高级电子表格,以满足那些真正需要被告知确切做什么和不做什么的人。因此,根据A列中的选择,我想按如下方式禁用某些单元格(但只禁用同一行上的单元格):

Number- disable cells D, F, G
Link - disable cells E, F, G
Image - disable cells D, E

任何帮助都非常感谢,我真的不喜欢我的excel / vba技能。

1 个答案:

答案 0 :(得分:2)

您可以锁定单元格,使其无法被选中。

Range("A2").Locked = True

但是,这需要您锁定工作表(使用或不使用密码)。

WorkSheets("Sheet1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
WorkSheets("Sheet1").EnableSelection = xlUnlockedCells

因此,当用户点击“主”单元格时,您只需切换锁定的单元格。

为了在用户选择新单元格时进行此更改,您需要挂钩到Selection Change事件(将下面的代码放在工作表模块中)。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

目标是当前选定的单元格。所以现在您可以测试当前选择的单元格,然后根据需要锁定其他单元格。

尽管如此,我建议不要使用UserForm。

编辑2 - 根据评论更新。

这是一个简单的实现

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 Then
    Dim tRow As Integer
    tRow = Target.Row

    Worksheets("Sheet1").Unprotect

    Dim dLock, eLock, fLock, gLock As Boolean

    Range("D" & tRow & ":G" & tRow).Locked = False
    Select Case Range("b" & tRow).Value
      Case "Number"
        dLock = True
        fLock = True
        gLock = True
      Case "Link"
        eLock = True
        fLock = True
        gLock = True
      Case "Image"
        dLock = True
        eLock = True
    End Select

      Range("d" & tRow).Locked = dLock
      Range("e" & tRow).Locked = eLock
      Range("f" & tRow).Locked = fLock
      Range("g" & tRow).Locked = gLock


    Worksheets("Sheet1").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Worksheets("Sheet1").EnableSelection = xlUnlockedCells

  End If
End Sub