2012-03-13 138 views
0

我有四列(A,B,C,D)。我的要求是,在每一行中,只有一個單元應接受數據,其餘單元不應接受數據(即剩餘的三個單元應處於鎖定模式)。在Excel中動態鎖定單元格

我該怎麼做?

+0

你的問題不是很清楚。你是否試圖鎖定3列,以便用戶不能在這些列中輸入任何內容? – assylias 2012-03-13 15:18:29

+0

正如我所理解的那樣,您正在尋找只允許修改組中的4個單元中的一個。即如果欄C有一個值,則將A,B,D留空。正確? – Gaffi 2012-03-13 16:13:59

回答

7

這裏有一種方法可以做你想問的問題。 (或者至少我認爲你在問什麼。)

首先,解鎖工作表中的所有單元格。默認情況下,它們全部處於鎖定狀態(儘管直到您真正保護表單時纔會生效),因此您需要先解鎖它們,否則一旦保護完成後,您將無法在任何位置輸入任何數據片。您可以手動做到這一點(2003年:選擇的所有單元格,格式>單元格>保護>取消選中「鎖定」)或使用VBA如下:

Sub UnlockAll() 
    With Sheet1 ' Or whatever sheet you're working on 
     .Unprotect 
     .Cells.Locked = False 
     .Protect 
    End With 
End Sub 

以上只需要執行一次。

然後,您必須使用Worksheet_Change事件來動態鎖定和解鎖單元格。在你的工作表模塊中,寫下如下代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Me.Unprotect 
    If Not IsEmpty(Target) Then 
     'Data was added in target cell. Lock its neighbours. 
     Me.Cells(Target.Row, 1).Resize(, 4).Locked = True 
     Target.Locked = False 
    Else 
     'Data was erased from target cell. Release its neighbours. 
     Me.Cells(Target.Row, 1).Resize(, 4).Locked = False 
    End If 
    Me.Protect 
End Sub 

假設你在單元格B2中寫入數據;這將鎖定單元格B1,B3和B4,以便無法輸入數據。如果您稍後決定清除單元格B2,則會解鎖B1,B3和B4。

+0

Thanq Jean-FrançoisCorbett, – 2012-03-14 05:07:11

+0

很好的答案,但我想爲其他列同樣的行爲,即現在(AD)列有這樣的行爲好,同樣我需要同一行爲(MQ)在同一個Excel表中的列 – 2012-03-14 11:47:19

+0

看,我回答了這個問題。如果您有新問題,請接受此答案併發布新問題。也許在發佈一個新問題之前,您可以嘗試理解這個解決方案,並使其適用於M-Q列和A-D列。 – 2012-03-14 12:53:39