输入指定文本时锁定工作表的所有单元格

时间:2010-10-01 16:52:36

标签: excel vba

我有一张Excel工作表,其中包含输入数据的字段。

假设总字段数为20.默认情况下,只要用户打开工作簿,就会锁定其中的10个字段。现在,其中一个字段是要求用户输入密码。如果密码为“AAA”,则将解锁五个(十个锁定的)字段。如果用户输入密码为“BBB”,则工作表的所有单元格都将是只读并锁定的。

我专注于用户输入“BBB”的情况。我试过这段代码:

if Range("Password").value="BBB" then
 cells.select
 selection.locked=true
end if

它给我一个错误“溢出”。

2 个答案:

答案 0 :(得分:0)

If Range("Password").Value = "BBB" Then
   ActiveSheet.UsedRange.Locked = True
End If

答案 1 :(得分:0)

它给我一个错误,即“溢出”。

我怀疑您是否会在此代码中出现溢出错误。如果您在Excel 2007及更高版本中使用Cells.Count之类的内容,可能会发生溢出。引入CountLarge只是因为Cells.Count返回一个Integer值,由于行/列增加,该值在Excel 2007中出错。 Cells.CountLarge返回一个Long值。

现在返回您的查询。

您不需要选择所有单元格。实际上,您应该避免使用Select。您可能需要查看How to avoid using Select in Excel VBA

如果您不保护工作表,则锁定工作表的所有单元格也将无效。您可以将代码更改为

If Range("Password").Value = "BBB" Then
    With ActiveSheet
        .Cells.Locked = True
        .Protect "Password"
    End With
End If

如果您不想使用Activesheet,请使用类似的

Option Explicit

Sub Sample()
    Dim ws As Worksheet

    '~~> Change this to the relevant sheet
    Set ws = Sheet1

    With ws
        If .Range("Password").Value = "BBB" Then
            .Cells.Locked = True
            .Protect "Password"
            '~~> To unprotect, uncomment the below
            '.UnProtect "Password"
        End If
    End With
End Sub