2016-02-13 189 views

回答

0

網上有很多資源顯示如何做到這一點。這裏有一個文章,幫助解釋給我聽: http://database.ittoolbox.com/groups/technical-functional/excel-l/how-to-lockunlock-an-excel-cell-based-on-the-contents-of-another-cell-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的當前內容(()方法需要一個行單元格 - 2 - 和列數 - 7 - 識別單元格; G列是第七列)。這兩個賦值語句改變了範圍的Locked屬性;一個鎖定細胞,另一個解鎖它們。

當然,如果你的代碼比較複雜,那麼每當工作表中的任何內容發生變化時,都要避免運行它。爲了避免過於頻繁執行的代碼,你可以使用傳遞給事件過程目標參數:

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

這個條件語句使用相交()函數來確定細胞G2(ActiveSheet.Cells(2, 7))包含在目標中。

因此,整個事件過程會是什麼樣子:

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 = True 
     End If 
    End If 
End Sub