簡體   English   中英

使用條件格式鎖定/解鎖單元格

[英]Lock/Unlock a cell using conditional formatting

如何使用條件格式基於另一個單元格(A2)中的值(是/否)鎖定/解鎖單元格(A1)?

在線上有很多資源顯示如何執行此操作。 這是一篇有助於向我解釋的文章: http : //database.ittoolbox.com/groups/technical-functional/excel-l/how-to-lockunlock-an-excel-cell-based-on-the-contents-另一個單元的4625040

萬一鏈接死了,這是要點:

若要執行您描述的操作,您將需要創建一個事件過程,只要工作表的內容發生更改,Excel就會調用該過程。 首先打開Visual Basic窗口(按Alt + F11)。 您應該在左上方的窗格中看到s樹視圖; 在該視圖中找到工作表的名稱,然后雙擊該名稱。 這將在右側的大窗格中打開與該工作表關聯的代碼模塊。

在大窗格的頂部,您將看到兩個下拉列表。 最初,左邊的將顯示(常規),而右邊的將顯示(聲明)。 單擊左側列表右端的三角形箭頭,然后選擇“工作表”。

Excel將自動添加SelectionChange事件過程的“框架”。 那不是我們想要的,但這不會造成任何傷害。

Excel還將右側下拉列表中的選擇更改為SelectionChange。 打開該列表,然后選擇“更改”。 Excel將添加第二個事件過程,該過程應如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

閃爍的光標將位於此骨架的空白行上。

您想要向Worksheet_Change過程添加代碼以檢查G2單元格的內容,並更改G3:G66范圍的狀態。 這需要一個IF語句和幾個賦值語句:

Private Sub Worksheet_Change(ByVal Target As Range)
    If ActiveSheet.Cells(2, 7).Text = "X" Then
        ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = True
    Else
        ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = False
    End If
End Sub

IF語句測試單元格G2的當前內容(Cells()方法采用行-2-和列號-7-標識單元格;列G為第七列)。 這兩個賦值語句更改范圍的Locked屬性。 一個鎖定單元格,另一個鎖定單元格。

當然,如果您的代碼更復雜,那么您將希望避免每次工作表上的任何內容更改時都運行它。 為了避免執行代碼過於頻繁,可以使用傳遞給事件過程的Target參數:

If Intersect(ActiveSheet.Cells(2, 7), Target) _
    Is Not Nothing Then

此條件語句使用Intersect()函數來確定單元格G2(ActiveSheet.Cells(2,7))是否包含在Target中。

因此,完整的事件過程如下所示:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(ActiveSheet.Cells(2, 7), Target) Is Not Nothing Then
        If ActiveSheet.Cells(2, 7).Text = "X" Then
            ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = True
        Else
            ActiveSheet.Range(Cells(3, 7), Cells(66, 7)).Locked = False
        End If
    End If
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM