Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zusammenführung Worksheet_Change

Zusammenführung Worksheet_Change
01.05.2023 14:36:17
Mark

Hallo,

ich würde mich sehr freuen, wenn mir jemand helfen könnte.

Ich habe in einem Tabellenblatt in einer Zelle eine Datenüberprüfung mittels Dropdown, in der niemals nichts stehen darf, d.h. die Zelle darf nicht leer sein.

Dazu benutze ich (im Forum gefunden, herzlichen Dank :))

Private Sub Worksheet_Change(ByVal Target As Range)
'Abfrage, ob Zelle C5 leer ist
If Target.Address = "$C$5" Then
If IsEmpty(Target) Then Application.Undo
End If
End sub


Des Weiteren habe ich ein Makro, das den Zelleninhalt von verschiedenen Zellen löschen soll, wenn eine andere Zelle leer ist (habe ich natürlich auch aus dem Forum, auch hier herzliches Dankeschön!)

Sub Zelle_loeschen()
Dim i As Long
Application.ScreenUpdating = False
For i = 14 To Cells(Rows.Count, 4).End(xlUp).Row
If Cells(i, 4) = "" Then
Cells(i, 2).Value = ""  'Zelle leeren
Cells(i, 3).Value = ""  'Zelle leeren
End If
Next i
Application.ScreenUpdating = True
End Sub


Wie schaffe ich es, beide Subs in ein funktionierendes Worksheet_Change-Sub zu packen (Gerne auch ohne For und Next i, das vermutlich nicht besonders resourcenschonend ist)? Ich bekomme das nicht hin und scheine bei meinen Versuchen einen Loop zu produzieren, bei dem Excel abstürzt...

Vielen, vielen Dank für die Möglichkeiten, die mir das Forum bietet! :)

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zusammenführung Worksheet_Change
01.05.2023 15:17:05
GerdL
Hallo Mark,

teste bitte, insbesondere ob die Leerung in Spatle D so reicht.
Private Sub Worksheet_Change(ByVal Target As Range)

    With Application
           'Abfrage, ob Zelle C5 leer ist
        If Target.Address = "$C$5" Then
            If IsEmpty(Target) Then
                .EnableEvents = False
                .Undo
                .EnableEvents = True
            End If
        ElseIf Target.Column = 4 Then
            'Abfrage, ob Zelle in D "" ist
            If Target = "" Then
                .EnableEvents = False
                Cells(Target.Row, 2).Resize(1, 2) = ""
                .EnableEvents = True
            End If
        End If
    End With
    
End Sub
Gruß Gerd


Anzeige
AW: Zusammenführung Worksheet_Change
01.05.2023 21:20:03
Mark
Hallo Gerd!

Vielen Dank für deinen Lösungsansatz.

Der erste Teil funktioniert perfekt. Der zweite Teil noch nicht ganz, da ich vermutlich ein Detail vergessen habe.

In C5 (siehe oberer Teil) ist eine Auswahl zu treffen, nach der in Zellen in Spalte D Inhalte stehen - oder eben nicht. Dies mache ich über eine Formel, die in der Zelle selbst steht:

=WENN($C$5="ABC";"1";"")
Wenn die Zelle komplett leer ist (damit auch die Formel gelöscht), funktioniert deine Lösung perfekt. Leider scheint die Formel eben nicht für "" stehen, so dass dein Ansatz die Zelle als nicht leer erkennt.

Sorry, dass ich vergessen habe, dies direkt in den ersten Post zu setzen.


Anzeige
AW: Zusammenführung Worksheet_Change
01.05.2023 22:28:45
GerdL
Hallo Mark,

so kannst du an der Eingabezelle C5 anknüpfen.

Private Sub Worksheet_Change(ByVal Target As Range)

    With Application
           'Abfrage, ob Zelle C5 leer ist
        If Target.Address = "$C$5" Then
            If IsEmpty(Target) Then
                .EnableEvents = False
                .Undo
                .EnableEvents = True
            'Abfrage, ob Zelle C5 ungleich ABC
            ElseIf Target > "ABC" Then
                .EnableEvents = False
                Range(Cells(14, 4), Cells(Rows.Count, 4).End(xlUp)).Offset(, -2).Resize(, 2) = ""
                .EnableEvents = True
            End If
        End If
    End With
    
End Sub
Gruß Gerd


Anzeige
AW: Zusammenführung Worksheet_Change
02.05.2023 09:28:17
Mark
Hallo Gerd,

vielen Dank für deine schnelle Rückmeldung.

Dein Ansatz hat leider zu viel gelöscht (nämlich alles zwischen B14 und C37), so dass ich deinen Code etwas umbauen musste. Jetzt ist es zwar nicht mehr dynamisch (sollte ja ursprünglich an die leeren Zellen in Spalte D geknüpft werden), funktioniert aber:

Private Sub Worksheet_Change(ByVal Target As Range)

    With Application
           'Abfrage, ob Zelle C5 leer ist
        If Target.Address = "$C$5" Then
            If IsEmpty(Target) Then
                .EnableEvents = False
                .Undo
                .EnableEvents = True
            'Abfrage, ob Zelle C5 ungleich ABC
            ElseIf Target > "ABC" Then
                .EnableEvents = False
                Range("B22") = ""
                Range("C22") = ""
                Range("E22") = ""
                Range("AI22") = ""
                Range("AJ22") = ""
                Range("B24") = ""
                Range("C24") = ""
                Range("E24") = ""
                Range("AI24") = ""
                Range("AJ24") = ""
                .EnableEvents = True
            ElseIf Target > "DEF" Then
                .EnableEvents = False
                Range("B21") = ""
                Range("C21") = ""
                Range("E21") = ""
                Range("AI21") = ""
                Range("AJ21") = ""
                Range("B23") = ""
                Range("C23") = ""
                Range("E23") = ""
                Range("AI23") = ""
                Range("AJ23") = ""
                .EnableEvents = True
            End If
        End If
    End With
    
End Sub
Verbesserungen nehme ich natürlich weiterhin sehr gerne entgegen. :) Da die Prüfung und Löschung der Zellen nur erfolgt, wenn in C5 eine Auswahl getroffen wird, ist die Lösung noch nicht vollkommen perfekt. Wenn man im obigen Beispiel von Hand etwas in die Zelle B22 einträgt, bleibt dies so lange bestehen bis über C5 eine erneute Auswahl getroffen wird.

Danke!

Gruß,
Mark

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige