2016-06-20 81 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的單元/對象。一旦激活了工作表,您使用的是上次訪問工作表時結束的代碼。 –