锁定/解锁单元格的If-Then-Else代码仍然失败

Cha*_*ase 1 excel vba excel-vba

使用:Excel 2010

我的代码的这部分一直在失败,我不知道为什么.当我尝试运行整个代码块时,它返回"运行时错误'1004':无法设置Range类的Locked属性".

'Lock/unlock issue
ThisWorkbook.Sheets("Dashboard").Activate
    ActiveSheet.Unprotect Password:="my password"
    Selection.Locked = False
    Selection.FormulaHidden = False
    If Range("D20").Value <> "Document Recorded" Then Range("F24").Locked = True Else Range("F24").Locked = False
    ActiveSheet.Protect Password:="my password", DrawingObjects:=True, Contents:=True, Scenarios:=True
Run Code Online (Sandbox Code Playgroud)

基本上,我想说:如果单元格D20不等于"Document Recorded",则锁定单元格F24,否则解锁单元格F24.

Sco*_*man 6

虽然我测试了您的代码并且它按原样运行,但我建议您将代码重构为以下内容.

With ThisWorkbook.Sheets("Dashboard")

    .Unprotect Password:="my password"
    .Range("F24").Locked = .Range("D20").Value <> "Document Recorded"
    .Protect Password:="my password", DrawingObjects:=True, Contents:=True, Scenarios:=True

End With
Run Code Online (Sandbox Code Playgroud)

工作直接与对象和避免"选择"和"ActiveSheet /工作簿/单元"是最好的做法,如果使用的话会导致各种问题毫无防备.

  • 我喜欢你怎么做`.locked`声明,非常时髦. (4认同)
  • 同样使用布尔表达式(如你所做)代替`If/Then/Else`语句通常会产生更简洁的代码. (3认同)