Excel - Zelleninhalte löschen, wenn in anderer Zelle "ein Wert" steht
Hallo liebes Forum,
ich habe ein kleines Problem bei einer kleinen Datenbank und hoffe das ihr mir weiterhelfen könnt.
Zum Problem: Ich habe in Zelle A1 eine Auswahlliste, bei der ich a,b oder c auswählen kann.
- habe ich a ausgewählt, soll nichts passieren.
- wähle ich jedoch b oder c aus, sollen im Zellbereich C4:F14 die Werte gelöscht werden
Dazu habe ich folgenden Code programmiert:
Private Sub Worksheet_TEST(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Select Case CInt(Range("A1"))
Case b
Range("C4:F14").Select
Selection.ClearContents
Case c
Range("C4:F14").Select
Selection.ClearContents
End Select
End If
End Sub
Ändere ich nun die Auswahl, passiert jedoch nichts, die Einträgen werden nicht gelöscht. Wo liegt der Fehler?
Danke für Eure Hilfe
Gruß diece
2 Antworten
Da sind einige Fehler drin.
Vor allem muss das ein Ereigniscode sein, da kannst Du nicht einfach _TEST daraus machen, da muss schon Change stehen bleiben..
So (mit noch ein paar Änderungen) würde der Code schon mal klappen:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Select Case Target.Value
Case "b"
Range("C4:F14").Select
Selection.ClearContents
Case "c"
Range("C4:F14").Select
Selection.ClearContents
End Select
End If
End Sub
Goldene Regel: .Select macht jeden Code sehr langsam und kann (und SOLL) in 99,9% aller Fälle vermieden werden:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
Select Case Target.Value
Case "b"
Range("C4:F14").ClearContents
Case "c"
Range("C4:F14").ClearContents
End Select
End If
End Sub
Für nur zwei Auswahlmöglichkeiten wäre auch die Select Case Funktion nicht sinnvoll, aber ich nehme mal an, Du willst das noch weiter ausbauen.
Danke fürs ☆
☼
Ich habe Deinen Code kopiert und bei mir eingefügt, und er funktioniert tadellos.
Wenn ich in A1 b schreibe wird der angegebene Bereich gelöscht.
Wenn ich jetzt in die Zelle A1 klicke und das b wieder lösche, dann wird der Inhalt von C2 gelöscht!
Natürlich muss A1 dann auch wirklich leer sein, es dürfen also auch keine Leerzeichen mehr dort stehen.
Wie gesagt, SO klappt es bei mir tadellos.
Hi Oubyi,
vielen Dank für die schnelle Antwort, funzt prima. Richtig, werde die SelectCase-Funktion noch mit weiteren Argumenten ausbauen.
Besten Dank nochmals
Da muss ich oubyi zustimmen:
Der Code muss im Ereignis Change des Worksheet stehen. Sonst weiß Excel ja nicht, dass es bei Veränderungen was machen muss.
Und der Code kann auch trefflich entrümpelt werden.
Private Sub Worksheet_Change(ByVal Target As Range)
'Abfrage, ob Änderung in Zelle A1 erfolgt ist
If Target.Address <> "$A$1" Then Exit Sub
If Not Target Is Nothing Then
Select Case Target.Value
Case "b"
Range("C4:F14").Select
Selection.ClearContents
Case "c"
Range("C4:F14").Select
Selection.ClearContents
End Select
End If
End Sub
oder noch kürzer:
Private Sub Worksheet_Change(ByVal Target As Range)
'Abfrage, ob Änderung in Zelle A1 erfolgt ist
If Target.Address <> "$A$1" Then Exit Sub
If Not Target Is Nothing Then
If Target.Value = "b" Or Target.Value = "c" Then
Range("C4:F14").Select
Selection.ClearContents
End If
End If
End Sub
Bei zwei Bedingungen kann man immer If statt Select Case nehmen. Erst bei mehr als 4 Bedingungen ist der Code mit Case kürzer als der mit If.
Guten Morgen,
habe noch eine Frage:
wenn die Zelle nun leer ist, wollte ich den Code wie folgt erweitern:
Leider klappt er dann nicht
Auch Case "0" hat nichts gebracht...