关于 vba:锁定/解锁单元格的 If-Then-Else 代码不断失败

If-Then-Else code that Locks / Unlocks cells keeps failing

使用:Excel 2010

我的这部分代码一直失败,我不知道为什么。当我尝试运行整个代码块时,它返回 "Run-time error \\'1004\\': Unable to set the Locked property of Range class"。

1
2
3
4
5
6
7
'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

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


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

1
2
3
4
5
6
7
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

直接使用对象并避免"选择"和"ActiveSheet/Workbook/Cell"是最佳做法,如果使用会导致各种意想不到的问题。


在运行代码之前,您必须关闭工作表保护。我假设您使用保护,否则您将不会使用单元锁定功能。