我有一张Excel工作表,其中包含输入数据的字段。
假设总字段数为20.默认情况下,只要用户打开工作簿,就会锁定其中的10个字段。现在,其中一个字段是要求用户输入密码。如果密码为“AAA”,则将解锁五个(十个锁定的)字段。如果用户输入密码为“BBB”,则工作表的所有单元格都将是只读并锁定的。
我专注于用户输入“BBB”的情况。我试过这段代码:
if Range("Password").value="BBB" then
cells.select
selection.locked=true
end if
它给我一个错误“溢出”。
答案 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