2017-08-04 82 views
1

一旦數據輸入到一個單元格中,我需要使用VBA代碼來鎖定特定的一組單元格。上下文:用戶將沿着一行輸入用戶名,傳遞等。該行中的一些單元格被鎖定,並且一些單元格被解鎖以用於他們需要輸入數據的位置,但是一旦他們在最後一個單元格中回答了他們的數據,我想該行中的所有先前未鎖定的單元格將被鎖定。將數據輸入到一個單元格後鎖定特定的單元格組

如果沒有它一遍又一遍地更新和鎖定單元格,我很難解決這個問題。這就是我現在所擁有的。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 

    ActiveCell.Select 
    If Range("O22") <> "" Then 
     ActiveSheet.Unprotect 
     Range("F22,G22,J22,K22,L22,O22").Select 
     Selection.Locked = True 
     ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    End If 

End Sub 
+0

**從不**在Worksheet_Change或Workbook_SheetChange事件過程中使用ActiveCell。它不僅通常不準確,而且單元格的值可以通過打字以外的其他方式進行更改。 – Jeeped

回答

0

像你想要更多的東西像這樣(請注意這是在不同的情況下也是如此)

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Column = 20 Then 
    Range("F22,G22,J22,K22,L22,O22").Locked = True 
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
    End If 

End Sub 

更改20到你想要的代碼,它改變運行任何列聽起來給我。

1

如果你想在工作簿自動鎖定該範圍內,如果「O22」不是空的,那麼這是代碼你需要

Private Sub Worksheet_Change(ByVal Target As Range) 
    'Check if O22 has changed before running rest of code 
    If Not Intersect(Target, Range("O22")) Is Nothing Then 
     'If the final column isn't empty then 
     If Range("O22") <> vbNullString Then 
      'Unprotect the sheet 
      Me.Unprotect 
      'Lock the target cells 
      Me.Range("F22,G22,J22,K22,L22,O22").Locked = False 
      'Reprotect the sheet 
      Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 
     End If 
    End If 
End Sub 

一般在VBA你應該避免使用過「選擇」或'激活',而是引用對象,請參閱this question.

很難準確判斷工作簿的結構,但如果您將此代碼複製到「工作表」代碼模塊中,那麼它應該適用於有問題的工作表,如果您需要它在更多的工作簿級別上工作,然後請給出更多的細節。

+1

我會在'ThisWorkbook'中將它更改爲'Private Sub Workbook_SheetChange(ByVal Sh As Object,ByVal Target As Range)'並將'Me'更新爲'Sh',以便它可以在任何表單上工作,並且可以交換'Range(「如果OP想要檢查他們改變的單元格,可以使用O22「)'作爲'Target'。或者,如果它需要被更改的O22,則可以將它包裹在「如果不相交」(目標,範圍(「O22」))爲「Nothing Then」。所有可能的選擇,這取決於OP想要的。 –

+1

Intersect絕對是更高性能的,沒有意義的是當O22甚至沒有改變時,我只是把它們放在一起,我現在就修改它!我想OP只會希望在他的工作簿中發生這種情況,因爲如果每張表單都設置爲登錄屏幕,但是如果沒有更多信息就很難判斷,我認爲這將會是一個奇怪的工作簿。 –

相關問題