2016-12-14 4 views
0

私は、パスのない保護されたシート、セルD6がロックされています。そのセルのVBAコードは実行されません。保護シート、セルロック、VBAコードを受け付けません

私はここにいくつかの記事を読んでいます。これは同様の問題の解決策となりました。どのように使用するか、どこに置くかはわかりません。私はそれにパスワードを持っていないと述べたように。

Worksheets("Loading").Protect Password:=****, UserInterfaceOnly:=True 

Private Sub Worksheet_Change(ByVal Target As range) 

Application.EnableEvents = False '<--| disable events handling 
On Error GoTo ErrorHandler '<--| be sure to catch any error and enable events handling back 

Select Case Target.Address 

    Case "$D$4" 
     'Recalculate Downpayment D5 if Purchase Price is changed 

     range("D5").Value = (range("D4").Value * range("B5").Value)/100 
     Debug.Print "New value for D5 Downpayment "; range("D5").Value 
     range("D6").Value = (range("D4").Value - range("D5").Value) ' This cell won't activate when locked and sheet protected 
     Debug.Print "D6 New Mortgage " & range("D6").Value 

Cells

+1

あなたのシートが保護されている場合(ここにパスワードがあるかどうかにかかわらず)、セルがロックされている場合、VBAで 'UserInterfaceOnly'引数を使用して保護しない限り、コードを変更する前に保護を解除する必要があります。 –

+0

私は自分が望むものを正しく説明しているかわかりません。ユーザーが何かを入力しなければならないフィールドではないので、フィールドD6をロックします。私のVBAコードは、他のセルのエントリからそれを埋めます。問題は、ページを保護してからユーザーに与えると、計算がD6に自動集計されないということです。それは$ 0のままです。私はなぜ実際にシートを保護すべきかわからない。ありがとう。 – geddeca

答えて

0

あなたは、セルD6の値を変更することができ、ワークシート変更イベントを持っています。 D6の値を変更するには、セルがロックされている場合は、まずVBAで保護されていないセルを保護する必要があります。今、あなたはこれを行う、あなたはD6は常に保護されるようにしたいと言っていること:

Case "$D$4" 
    'unprotect sheet 
    Worksheets("Loading").Unprotect 

    'Recalculate Downpayment D5 if Purchase Price is changed 

    range("D5").Value = (range("D4").Value * range("B5").Value)/100 
    Debug.Print "New value for D5 Downpayment "; range("D5").Value 
    range("D6").Value = (range("D4").Value - range("D5").Value) 
    Debug.Print "D6 New Mortgage " & range("D6").Value 

    'protect the sheet back 
    Worksheets("Loading").Protect 

これは、あなたの質問に答えた場合、チェックマークをヒットしてください。

+0

あなたが書いたものが私のためであるかどうかはわかりません。あなたはそのコードをどこに置いていますか?モジュールで?私は私が欲しいものを正しく説明したかどうかはわかりません。ユーザーが何かを入力しなければならないフィールドではないので、フィールドD6をロックします。私のVBAコードは、他のセルのエントリからそれを埋めます。問題は、ページを保護してからユーザーに与えると、計算がD6に自動集計されないということです。それは$ 0のままです。なぜ私はシートを何故保護しなければならないのか分かりません。 – geddeca

+0

大丈夫、私は答えを編集しました。 MINDでは、セルD6がロックされていることを確認する必要があります。これを行うには、セルD6>セルの書式>保護を右クリックし、チェックマークがロックされている必要があります。これを行うには、シートが保護されていないことが必要です – Ibo

+0

更新されているシートが「読み込み中」の場合は、シート名をハードコードする代わりに(例えば)「Me.Unprotect」を使用できます。ワークシート・コード・モジュールでは、「Me」は関連するワークシートを参照します。 –

関連する問題