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

时间:2016-06-20 18:50:44

标签: excel vba excel-vba

使用:Excel 2010

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

'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不等于&#34;文档记录&#34;然后锁定单元格F24,否则解锁单元格F24。

2 个答案:

答案 0 :(得分: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

直接使用 对象和avoiding 'Select' and 'ActiveSheet/Workbook/Cell'是最佳做法,如果使用会导致各种毫无疑问的问题。

答案 1 :(得分:1)

在运行代码之前,必须先关闭工作表保护功能。我假设您使用保护,否则您将无法使用手机锁功能。