1

私は2つの列を持っていますが、私が望むコードは、あるセルから別のセルに評価されることです。

最初の列には名前のドロップダウン検証があるセルがあり、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 なしでそれを行う方法があれば、それは素晴らしいことです。

助けてくれてありがとう。

4

3 に答える 3

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

ターゲット範囲は複数のセルになる可能性があることに注意してください (コピー/貼り付けを使用する場合など)。この場合は、処理してテストする必要があります。

Intersect を呼び出すと、ターゲット範囲とテスト対象の範囲 (このサンプルでは A1:A10) の共通部分が返されます。

次に、.Offset(0,1) を使用して、対応する隣接セルにアクセスできます。

于 2009-04-15T20:20:50.390 に答える
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メソッドが何かを実行するようにします。ただし、おそらく他のすべてのセルのロックを解除する必要があります。

于 2009-04-15T19:55:11.997 に答える
0

そのコード スニペットは私にとって完璧に機能します。

そのコードを適切なWorkSheetオブジェクトに配置しましたか? VBA モジュールに入れるだけでは機能しません。Visual Basic Editor を使用している場合は、画面の左側にある "Microsoft Excel Objects" というラベルの付いたディレクトリを探します。そのディレクトリにはWorkSheet、ファイル内のすべてのシートのオブジェクトが必要です。これらのいずれかをダブルクリックして、そのコードを編集しますWorkSheet。これは、コード スニペットが配置される場所です。

于 2009-04-15T20:02:43.333 に答える