2016-06-20 11 views
1

使用方法:Excel 2010セルのロック/アンロックが失敗し続けるIf-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

あなたのコードをテストしていて、そのまま動作しましたが、コードを次のようにリファクタリングすることをお勧めします。 直接オブジェクトとavoiding 'Select' and 'ActiveSheet/Workbook/Cell'作業

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 

はベストプラクティスであると場合は、疑うことを知らない問題のすべての種類につながることができます使用します。

+3

また、 'If/Then/Else'文の代わりにブール式を使用すると、より簡潔なコードが得られます。 –

+4

私はあなたが '.locked'ステートメントをやったのが好きです。 – BruceWayne

+3

私はSO @ BruceWayneで学んだトリック! –

1

コードを実行する前にシート保護をオフにする必要があります。私はあなたがセルロック機能を使用していないあなたの保護を使用していると仮定しています。

+0

あなたのご意見ありがとうございます、Darrell。あなたはワークシートの保護について正しいですが、そのコードスニペットが実行される前にワークシートのロックを解除しています。コードブロック全体を含めるように投稿を編集しました。たぶん問題はそこに見つかるでしょう。 – Chase

+0

それは私のために働いたが、Selection.Locked = Falseで選択しているセル/オブジェクトは不明です。シートをアクティブにすると、最後に選択したコードを使用してコードを使用しています。 –

関連する問題