Schalte die Zelle unter einer angrenzenden Zelle auf eine Erkrankung frei
-
09-09-2019 - |
Frage
Ich habe zwei Spalten, aber die Kodition, die ich möchte, soll von einer Zelle zur anderen bewertet werden.
Die erste Spalte hat Zellen, die eine Dropdown -Validierung mit Namen haben, und die zweite wird nur aktiviert, wenn ein bestimmter Name aus der benachbarten Zelle ausgewählt wird.
Bisher habe ich diesen Code nur gefunden, aber er scheint nicht zu funktionieren:
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
Ich würde diesen Code von (zum Beispiel) A1: A10 und B1: B10 benötigen.
Ich hoffe ich mache Sinn. Wenn es eine Möglichkeit gibt, es ohne VBA zu tun, wäre das großartig.
Danke für die Hilfe.
Lösung
Der Zielparameter zeigt Ihnen den Bereich an, der geändert wird.
Sie müssen so etwas wie Folgendes tun:
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
Beachten Sie, dass Ihr Zielbereich mehr als eine Zelle sein kann (z. B. bei Verwendung von Kopieren/Einfügen), daher müssen Sie diesen Fall verarbeiten und testen.
Das Aufrufen von Schnittstellen gibt Ihnen den Schnittpunkt des Zielbereichs und den Bereich zurück, an dem Sie testen möchten (A1: A10 in dieser Stichprobe).
Sie können dann mit .Offset (0,1) auf die entsprechenden benachbarten Zellen (en) zugreifen.
Andere Tipps
Dieser Code -Snippet funktioniert perfekt für mich.
Haben Sie diesen Code in den richtigen Platz gestellt? WorkSheet
Objekt? Es wird nicht funktionieren, wenn Sie es einfach in ein VBA -Modul einfügen. Wenn Sie sich im Visual Basic -Editor befinden, suchen Sie nach einem Verzeichnis auf der linken Seite des Bildschirms mit der Bezeichnung "Microsoft Excel -Objekte". In diesem Verzeichnis sollte a sein WorkSheet
Objekt für jedes Blatt in Ihrer Datei. Doppelklicken Sie auf einen davon, um den Code dafür zu bearbeiten WorkSheet
. Hier sollte Ihr Code -Snippet gehen.
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
Use Me.Protect so the .Locked method does something. You should probably unlock every other cell though.