细胞的数据控制

时间:2013-10-31 07:56:39

标签: excel excel-vba vba

这就是我想要做的。我有五列(A,B,C,D,E)。我的要求是,在每一行中,只有一个单元格应接受数据,其余单元格不应接受数据(即其余四个单元格应处于锁定模式)。

例如,如果用户在第1列中输入1,则BCDE将被锁定,但如果用户决定更改选项,则他们可以放回原始数据并更改为列中的其他值。以下是我想要做的一个示例。

VeryStrong   Strong   Neutral   Weak   VeryWeak
1              0        0        0        0      Data keyed by user 1
0              1        0        0        0      Data keyed by user 2
0              1        1        0        0      *This is what I am trying to prevent*

用户1可以返回并更改

Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Unprotect
    If Not IsEmpty(Target) Then
        'Data was added in target cell. Lock its neighbours.
        Me.Cells(Target.Row, 1).Resize(, 5).Locked = True
        Target.Locked = False
    Else
        'Data was erased from target cell. Release its neighbours.
        Me.Cells(Target.Row, 1).Resize(, 5).Locked = False
    End If
    Me.Protect
End Sub

1 个答案:

答案 0 :(得分:0)

  

我试图找出代码并更改与特定列相关的代码,例如K9,L9,M9,N9,O9。 - Timothy Teoh 27分钟前

试试这个。 (已审判并已经过测试

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim MyPass As String
    Dim Rw As Long

    MyPass = "Sid" '<~~ Change this to your password

    On Error GoTo Whoa

    If Target.Cells.CountLarge > 1 Then Exit Sub

    Application.EnableEvents = False

    If Not Intersect(Target, Range("K:O")) Is Nothing Then
        Rw = Target.Row

        ActiveSheet.Unprotect MyPass

        Select Case Target.Value
        Case Is > 0
            Range("K" & Rw & ":O" & Rw).Locked = True
            Target.Locked = False
        Case 0
            Range("K" & Rw & ":O" & Rw).Locked = False
        End Select
    End If

Letscontinue:
    ActiveSheet.Protect MyPass
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub

enter image description here