Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1836to1840
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
Zelleninhalt löschen, wenn Zelle x
08.07.2021 17:15:14
Jenny
Hallo Ihr Lieben,
ich habe nun ein ganze Weile eine Lösung für mein Problem gesucht, aber nichts gefunden.
Ich möchte gerne, dass wenn in Zelle 1 (DropDown mit Textinhalten) etwas steht, dann der Zelleninhalt aus Zelle 2 (Zahl oder Wort... egal) gelöscht wird.
Grundsätzlich funktioniert das auch, aber leider nur bei Zahlenwerten und ohne DropDown.
Ich habe auch schon versucht nur "Range("Zelle2").ClearContents" mit einer WENN-DANN Bedingung aus dem Tabellenblatt zu starten, um den If-Block im VBA zu umgehen (habe versucht das Sub mit ner Funktion zu starten) .... Geht aber wohl nicht, da man über diesen Weg nicht den Wert der Zelle ändern kann.... und das will ich ja.
Lange Rede und so.... hier der Link zu einer Beispieldatei:
https://www.herber.de/bbs/user/147013.xlsm
ich hoffe der Link funktioniert...
In jedem Fall Ganz lieben Dank für Eure Hilfe.
VG Jenny

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelleninhalt löschen, wenn Zelle x
08.07.2021 17:33:37
Daniel
HI
so für die Zelle C2 als DropDownzelle und für denn Fall, dass bei jedem belieigen Inhalt außer Leer die Zelle darunter geleert wird.

Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$C$2" Then
If Target.Value  "" Then
Application.EnableEvents = False
Range("C3").ClearContents
Application.EnableEvents = True
End If
End If
End Sub
das Application.EnableEvents verhindert hier den Selbstaufruf des Makros, wenn es eine Änderung auf dem Blatt durchführt.
Das ist immer sinnvoll, wenn man das weglässt, kann man schnell in eine Endlosschleife geraten (hier würde es auch ohne funktionieren, weil die Prüfung dafür sorgt dass es zu einem Abbruch kommt, aber das muss nicht immer so sein).
dein Beispiel mit der Zahl funktioniert eher zufällig:
wenn du mehrere "=" in so einer Bedingungsprüfung kombinierst, dann werden die so berechnet wie eine normale Berechnung mit +-*/ auch.
dh zuerst werden die Werte links und rechts des ersten "=" mit einander verglichen; dh Target.Address mit "$A$2", das ergibt TRUE oder FALSE.
Dann wird dieses Ergebnis mit dem nächsten Wert verglichen, also TRUE/FALSE mit "1".
das müsste jetzt immer ein FALSE ergeben, weil ein Wahrheitswert immer was anderes ist als ein Text, aber hier schlägt jetzt die Implizite Typumwandlung zu.
weil du versuchst, einen Text mit einem Wahrheitswert zu vergleichen, versucht VBA diesen Text in einen Wahrheitswert zu wandeln und dabei gilt die Regel, dass ein Text, der einer Zahl ungleich 0 entspricht, ein TRUE ergibt.
dh der letzte Vergleich ist dann TRUE = TRUE und damit als ganzes TRUE.
Daher funktioniert es in dieser Konstellation, aber wie gesagt, das ist eher Zufällig.
Gruß Daniel
Anzeige
AW: Zelleninhalt löschen, wenn Zelle x
08.07.2021 18:06:15
Jenny
Hallo Daniel,
Wow! Ganz lieben Dank für deine schnelle Antwort und die Erläuterung. :)
Es funktioniert auch wunderbar! :D Ich habe das jetzt so gemacht, dass nur bei bestimmten Zelleinhalten Zelle 2 geleert wird.
Nun hab ich aber doch noch ein Problem: Ich habe eine ziemlich komplexe Excel, wo sehr viel programmiert worden ist. Ich wollte diese lediglich durch diese Funktion ergänzen. Jedenfalls sagt er mir nun "Fehler beim Kompilieren: Mehrdeutiger Name: Worksheet_Change
Ich habe nachgeguckt. Es gibt diese Bezeichnung für ein Sub schon. Habe versucht dein Sub in ein Modul zu packen ... aber dann funktioniert es nicht mehr. Gibt es eine Möglichkeit wie ich beide "Worksheet_Change" in einem Tabellenblatt nutzen kann?
Ich kann dir auch mehr Infos zu der Datei geben: So sieht der Code (wiederholende Zeilen für weitere Blätter entfernt) für diese Blatt aus:
(Wobei es noch mindestens 2 Module gibt, die hier ebenfalls drauf zugreifen)

Private Sub Worksheet_Change(ByVal Target As Range)
'ausblenden Spalten
Worksheets("Prep").Columns("C:AE").Hidden = True
'ausblenden Zeile
Worksheets("Prep").Rows("8:78").EntireRow.Hidden = True
Call Listboxfüllen(5, 63, "I", "J", 10, 1, 2) 'Prep
'einblenden Spalte
Call einblenden("Prep", "J")
'einblenden Zeile
Call ZeileEinblenden(5, 63)
'Check for RMV duration
If WorksheetFunction.Sum(Range("AE5"), Range("AG5")) > 12 Then
MsgBox "RMV: Conduct and travel time about 12h! Recommendation: increase number of RMVs OR plan overnight stay.", vbInformation, "Time window exceeded"
End If
If WorksheetFunction.Sum(Range("AE6"), Range("AG6")) > 12 Then
MsgBox "RMV: Conduct and travel time about 12h! Recommendation: increase number of RMVs OR plan overnight stay.", vbInformation, "Time window exceeded"
End If
If WorksheetFunction.Sum(Range("Y3"), Range("Y5")) > 1 Then
MsgBox "in-/exclusion criteria are subset of CRF items", vbInformation, "You exceeded 100% of patients"
End If
End Sub
Ganz lieben Dank nochmal
VG Jenny
Anzeige
AW: Zelleninhalt löschen, wenn Zelle x
08.07.2021 18:14:56
Daniel
Hi
es kann nur ein Worksheet-Change-Event Makro geben und dieses muss im Modul des Tabellenblatts stehen.
wenn darin mehrere Sachen gemacht werden sollen, dann muss man die Codes halt in ein Marko packen.
Über die IF-Abfrage, welche Zelle(n) geändert wurden, kannst du ja bestimmen, wann welcher Teil ausgeführt wird
Gruß Daniel

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige