2009-04-15 102 views
1

我有兩列,但我想要的編碼是從一個單元格到另一個單元格進行評估。從鄰近單元格的條件解鎖單元格

第一列有單元格,其中有名稱下拉驗證,第二列只有在選擇了相鄰單元格中的特定名稱時纔會激活。

到目前爲止,我只找到這個代碼,但它似乎不工作:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Range("A1").Value = "Car" Then 
     Range("B1").Locked = False 
    Else 
     Range("B1").Locked = True 
    End If 
End Sub 

我需要從(例如)A1這個碼進入:A10和B1:B10。

我希望我有道理。如果沒有VBA的方法,那會很好。

感謝您的幫助。

回答

2

Target參數告訴您正在更改的範圍。

你需要做類似如下:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range 

    Set rng = Intersect(Range("A1:A10"), Target) 
    If rng Is Nothing Then 
     ' Not updating the range we care about 
     Exit Sub 
    Else 
     rng.Offset(0, 1).Locked = ... whatever ... 
    End If 
End Sub 

請注意,您的目標範圍可以超過一個細胞,所以你需要處理和測試這種情況下(使用複製/粘貼時,例如)。

調用相交可以返回目標範圍和您有興趣測試的範圍(本示例中爲A1:A10)的交集。 (0,1)

0
Private Sub Worksheet_Change(ByVal Target As Range) 

If Range("A1").Value = "Car" Then 
    Range("B1").Locked = False 
    Me.Unprotect ("password") 
Else 
    Range("B1").Locked = True 
    Me.Protect ("password") 
End If 

End Sub 

使用Me.Protect,這樣.Locked方法就可以執行某些操作。不過你應該可以解鎖所有其他的細胞。

0

該代碼片段適合我。

您是否將該代碼放入正確的WorkSheet對象中?如果您只是將它放入VBA模塊中,它將不起作用。當您在Visual Basic編輯器中時,在標有「Microsoft Excel對象」的屏幕左側查找一個目錄。在該目錄中應該是文件中每張表的WorkSheet對象。雙擊其中一個編輯WorkSheet的代碼。這是你的代碼片斷應該去的地方。