2016-06-20 74 views
1

使用:Excel 2010If-Then-Else代码,锁定/解锁单元格不断失败

我的代码的这部分保持失败,我不知道为什么。当我尝试运行整个代码块时,它会返回“运行时错误'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 

基本上,我想说:如果单元格D20不等于“文献记载”然后锁定单元F24,否则解开细胞F24。

+2

如果工作表受到保护,那么您需要取消保护以更改“锁定”状态 –

+0

@TimWilliams我是(或者至少,我相信我是)首先解锁工作表。让我修改我的帖子以包含代码块。我非常感谢您的反馈。 – Chase

+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'是最好的做法,如果使用的话会导致各种问题毫无防备。

+3

另外使用布尔表达式(如你所做的)来代替'If/Then/Else'语句通常会产生更简洁的代码。 –

+4

我喜欢你如何做'。锁住'的声明,非常时髦。 – BruceWayne

+3

我在@BruceWayne学到的一招! –

1

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

+0

感谢您的反馈,Darrell。您对保护工作表是正确的,但我相信在解决该代码片段之前解锁工作表。我编辑我的帖子,包括整个代码块。也许这个问题在那里找到。 – Chase

+0

它适用于我,但唯一未知的是您选择的Selection.Locked = False的单元/对象。一旦激活了工作表,您使用的是上次访问工作表时结束的代码。 –