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

uqcuzwp8  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(237)

我有一个Excel工作表,其中有输入数据的字段。
假设字段总数为20。每当用户打开工作簿时,默认情况下会锁定其中10个字段。现在,其中一个字段要求用户输入密码。如果密码为“AAA”,则(10个锁定字段中的)5个字段将解锁。如果用户输入密码为“BBB”,则工作表的所有单元格将为只读和锁定。
我关注的是用户输入“BBB”的情况,我试了下面的代码:

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

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

vngu2lb8

vngu2lb81#

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

3wabscal2#

它给我一个错误为"溢出"。
我怀疑你应该得到一个溢出错误与此代码。溢出可能会发生,如果你使用类似Cells.Count在Excel 2007年以上。CountLarge被引入只是因为Cells.Count返回一个Integer值的错误在Excel 2007中,因为增加行/列。Cells.CountLarge返回一个Long值。
现在回到您的查询。
您不需要SELECT所有单元格。事实上,您应该避免使用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

相关问题