2016-12-14 63 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

好的,我編輯了答案。記住,你必須確保電池D6被鎖定。要做到這一點,右鍵單擊單元格D6>格式單元格>保護和複選標記應該在那裏爲鎖定。爲此,您的工作表必須不受保護 – Ibo

+0

如果正在更新的工作表是「正在加載」,那麼您可以使用(例如)「Me.Unprotect」而不是在工作表名稱中進行硬編碼。在工作表代碼模塊中,「Me」指的是關聯的工作表。 –

相關問題