PDA

Vollständige Version anzeigen : Zellinhalt löschen, bei Änderung


sistine
19.02.2008, 08:52
Hallo,

ich glaube ich beschreibe am besten gleich mein Problem:

z. B. in der Spalte D kann der Nutzer der Excel-Tabelle über ein Dropdown-Menü eine Auswahl an Themen auswählen. In der Spalte daneben kann der User ebenfalls über ein Dropdown-Menü eine Auswahl treffen, entsprechend dem was in der Spalte zuvor ausgewählt wurde. Es werden also nur die Auswahlmöglichkeiten angezeigt, die über Datengülltigkeit der Spalte D zugeordnert worden sind.

Nun möchte ich das wenn jemand später seine Auswahl ändert in Spalte D, dass dementsprechend das zuvor ausgewählte in Spalte E gelöscht wird. Folgenden Code habe ich dafür mir schon mal zusammengebastelt:

Private Sub Worksheet_Change(ByVal Target As Range)
'If Not Application.Intersect(Target, Range("$D$11:$D$35")) Is Nothing Then Exit Sub

If Target.Address <> "$D$11" Then Exit Sub
Range("E11") = ""


End Sub

Jedoch weiß ich momentan nicht, wie ich das auf alle Zeilen in den Spalten anwenden kann.

Vielleicht könnt ihr mich ja helfen?

LG

Sistine

jinx
19.02.2008, 09:12
<font size="2" face="Century Gothic">Moin, sistine,

Private Sub Worksheet_Change(ByVal Target As Range)
'If Not Application.Intersect(Target, Range("$D$11:$D$35")) Is Nothing Then Exit Sub

If Target.Column <> 4 Then Exit Sub
Application.EnableEvents = False
Range("E" & Target.Row) = ""
'Range("E" & Target.Row & ":Z" & Target.Row) = ""
Application.EnableEvents = True

End Sub
wobei ich den Bereich in Spalte D noch einschränken würde...</font>

sistine
19.02.2008, 09:56
Hi,

vielen lieben Dank es funktioniert.

Wie meinst Du das mit die Spalte D einschränken? Das das Makro nur ausgeführt wird in einem bestimmten Bereich dieser beiden Spalten?

LG

Sistine

jinx
19.02.2008, 09:58
<font size="2" face="Century Gothic">Moin, sistine,

ja, etwa so wie in der ersten auskommentierten Zeile des Makros - aber hier wird nur die Spalte D (entspricht der 4) geprüft...</font>

sistine
20.02.2008, 08:55
Hallo,

ich bräuchte nochmal eure Hilfe.

Es handelt sich weiterhin um das oben genannte Problem. Nur das ich jetzt noch weitere Spalten hin zu bekommen habe.

Jetzt soll also wenn eine Änderung in Spalte D gemacht wird, die Spalten E-G gelöscht werden. Aber auch wenn sich nur z. B. in der Spalte F etwas ändert, die darauf folgende Spalte, also G, gelöscht werden.

Habe schon probiert den Inhalt einer weiteren Spalte zu löschen mit:

Range("E" & Target.Row & "F" & Target.Row) = ""

Aber irgendwie funktioniert das nicht. Könnt ihr mir helfen?

LG

Nicole

jinx
20.02.2008, 09:01
<font size="2" face="Century Gothic">Moin, Nicole,

z.B. so:

Private Sub Worksheet_Change(ByVal Target As Range)

If Application.Intersect(Target, Range("$D$11:$D$35, $F$11:$F$35")) Is Nothing Then Exit Sub

Application.EnableEvents = False
Target.Offset(0, 1).Resize(1, 3).Value = ""
Application.EnableEvents = True

End Sub
wobei diese Änderung immer 3 Zellen nebenan leert - sonst über die Spalte der Änderung arbetien udn in einer If-Anweisung die einzelnen Löschbereiche setzen (oder bei noch mehr Select Case).</font>

sistine
20.02.2008, 09:14
Hi,

vielen Dank erstmal für die schnelle Antwort. Aber leider funktioniert Dein Quellcode nicht. Muss das in ein Modul geschrieben werden? Ich habe es momentan im Worksheet selber drin.

Wieso verwendest Du die Methode Resize? Ich will nicht die Zellen ganz löschen, sondern nur den Inhalt. Also das was zuvor über ein Dropdown-Menü ausgewählt wurde.

Ich habe auch gerade festgestellt das der ursprüngliche Quellcode nicht mehr funktioniert. Also das Löschen des Zellinhaltes von Spalte E, wenn sich in D etwas ändert. Kann das damit zusammenhängen, dass ich die Spalten, also diese Dropdown-Menüs alle miteinander verknüpft habe, mit der Formel (in Datengültigkeit) =indirekt(d11) z. b.?

LG

Sistine

jinx
20.02.2008, 09:18
<font size="2" face="Century Gothic">Moin, Sistine,

der Code gehört schon hinter die Tabelle, in der die Aktion ausgeführt werden soll. Es werden auch keine Zellen gelöscht, sondern geleert (Inhalt durch Nichts ersetzt). Funktioniert der Code gar nicht, nur fehlerhaft? Es darf nur eine Prozedur mit dem Namen hinter der Tabelle vorhanden sein, bei meinem Test vorab hat er funktioniert (Excel97).

Resize definiert die Größe eines Range-Objektes neu: hier von einer Zelle auf eine Zeile und 3 Spalten...</font>

sistine
20.02.2008, 09:21
Also er hat einfach gar nichts gemacht. Wenn ich der Spalte D etwas ändere, löscht nichts in den darauf folgenden Spalten. Nicht mal in einer. Es ist auch nur eine Prozedur vorhanden.

Ach das mit dem "tue nichts" habe ich auch gerade gesehen. :-)


Oh ich muss mich korrigieren, ich war noch im Entwurfsmodus. Muss ich wohl ausversehen angeklickt haben. Habe ich erst gar nicht gesehen. Jetzt geht es natürlich. Aber muss noch ein wenig probieren ob das was Du mir geschrieben hast jetzt auch funktioniert, hatte jetzt wieder den ursprünglichen Code getestet erstmal. :-)

Sorry. :-)

LG

Sistine

sistine
20.02.2008, 09:25
Aber Dein Code funktioniert trotzdem nicht. Habe Excel2003. Mag es daran liegen?

LG

Nicole

jinx
20.02.2008, 09:28
<font size="2" face="Century Gothic">Moin, Nicole,

ich kann nur meine Beispielmappe anhängen und Dich bitten, dort die Funktionalität zu prüfen.

Hinweis: Auch bei größeren Änderungsaktionen wird hier das Makro ausgelöst, Unterbinden kann man das, indem zuerst Selection.Count > 1 zum Verlassen der Priezedur abgefragt wird...</font>

sistine
20.02.2008, 09:33
Also ich weiß nicht warum, aber jetzt funktioniert es. Jetzt funktioniert auch Dein Code. Aber ich habe schon bei anderen Sachen festgestellt das mein Rechner bzw. meine Excel Version sehr empfindlich ist.

Aber vielen vielen Dank nochmal. :-)

LG

Sistine

sistine
20.02.2008, 09:58
Sach mal, der Code funktioniert ja soweit gut. Wenn ich etwas in Spalte D ändere, löscht er den Inhalt von allen darauf folgenden Zellen. Wenn ich was in F ändere, macht er das gleiche mit der Spalte G. Aber wenn ich in E etwas ändere, dann löscht er nichts. Woran kann das liegen bzw. muss ich verstehen, warum er genau diese Spalte überspringt?

LG

Sistine

jinx
20.02.2008, 10:00
<font size="2" face="Century Gothic">Moin, Nicole,

der Bereich, in dem das Makro funktionieren soll, ist in Range("$D$11:$D$35, $F$11:$F$35") angegeben worden...</font>

sistine
20.02.2008, 10:09
ja genau das habe ich auch gerade festgestellt. :-)

habe es auch schon geändert.