2015-02-24 29 views
0

我需要在給定範圍內的數據錄入後鎖定每個單元。就像我輸入Y或N一樣,所以沒有人可以再次編輯它。下面是我的代碼,任何幫助將不勝感激。謝謝!數據錄入後鎖定單元

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim A As Range, MyPass As String, sh As Worksheet 
Dim unit As Range 
Set A = Range("E10:E22") 
MyPass = "a" 
Set sh = ActiveSheet 
If Intersect(Target, A) Is Nothing Then Exit Sub 
Set unit = Union(Target, Target.Offset(0, 1), Target.Offset(0, 2), Target.Offset(0, 3)) 
Application.EnableEvents = False 
sh.Unprotect (MyPass) 
unit.Locked = False 
Target.Offset(0, 1) = Environ("Username") 
Target.Offset(0, 2) = Now() 
Target.Offset(0, 3) = Now() 
unit.Locked = True 
sh.protect (MyPass) 
Application.EnableEvents = True 
End Sub 
+0

你的代碼有什麼問題?任何錯誤?在哪一行和哪一種錯誤? – 2015-02-24 06:40:26

+0

感謝您查看它。代碼沒有問題,但我想鎖定單元格後的條目,沒有人可以再次編輯該單元格。 – 3689 2015-02-24 07:21:00

回答

0

我已經刪除了一些你的變量直接引用是需要所有與集創建從未設定任何範圍。假設工作表當前受E10:E22解鎖保護,則以下內容應按照您的預期方式工作。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Count > 1 Then Exit Sub 
    If Not Intersect(Target, Range("E10:E22")) Is Nothing Then 
     On Error GoTo Safe_Exit 
     Application.EnableEvents = False 
     Dim MyPass As String: MyPass = "a" 
     Me.Unprotect MyPass 
     'Target.Resize(1, 4).Locked = False ' ◄ not needed when the sheet is unprotected 
     Target.Offset(0, 1).Resize(1, 3) = Array(Environ("Username"), Now(), Now()) 
     Target.Resize(1, 4).Locked = True 
     Me.Protect MyPass 
    End If 
Safe_Exit: 
    Application.EnableEvents = True 
End Sub 
+0

感謝您的幫助,我已經嘗試過,但它又鎖定了其他單元格,就像我在E10中輸入的那樣,然後E11,E12 ....被鎖定進行編輯。我需要在每次輸入後鎖定E10:E22。此外,我試圖讓用戶編輯範圍,但它也不起作用。幫助解決這個問題。 – 3689 2015-02-24 07:19:43

+1

這聽起來像你永遠不會解鎖E10:E22開始。單元格(默認情況下)處於鎖定狀態(例如'Cell.Locked = True'),但通過保護工作表來執行實際的鎖定。請重新閱讀我答案的第一段。如果您希望在保護工作表後剩餘的單元格能夠接受輸入,則它們必須以'Cell.Locked = False'開頭。使用「Ctrl + 1」,然後訪問*保護*選項卡,以解鎖狀態啓動它們。該子將在收到輸入時鎖定每一個。 – Jeeped 2015-02-24 16:29:43

+0

非常感謝Jeeped。其實我沒有解開範圍,但一旦你詳細闡述它,並幫助解決了原因。欣賞它。 – 3689 2015-02-26 07:01:03