2009-04-15 6 views
1

私は2つのカラムを持っていますが、私が望むコードは1つのセルから別のセルに評価されます。隣接セルの条件でセルをロック解除する

最初の列には名前付きドロップダウン検証を持つセルがあり、2番目の列は隣接セルの特定の名前が選択されている場合にのみアクティブになります。

は、これまでのところ私はこのコードを見つけたが、動作していないよう:

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 

注意を。

Calling Intersectは、目標範囲とテストに関心のある範囲の交差点を返します(このサンプルではA1:A10)。

次に、.Offset(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 Editorで、画面の左側にある「Microsoft Excelオブジェクト」というディレクトリを探します。そのディレクトリには、ファイル内のすべてのシートのオブジェクトがWorkSheetである必要があります。これらのいずれかをダブルクリックして、WorkSheetのコードを編集します。ここでコードスニペットを実行します。

関連する問題