Wert aus Zeile lesen bevor sie gelöscht wird

Hallo!

Ist es möglich einen Wert (in meinem Fall eine ID) aus einer Zelle zu lesen, kurz bevor die ganze Zeile mittels (Zellen löschen -> Ganze Zeile) gelöscht wird? quasi ein „before change“ oder so …

Ich müsste nämlich auf einem anderen Blatt die Zeile mit derselben ID dann auch löschen … und das wär natürlich eine viel schönere Lösung als alle Zeilen durchzugehen und die ID’s zu überprüfen.

Thx mfg

Hallo Wotan.

Ich verstehe ehrlich gesagt nicht ganz, was du machen willst.

Du willst einen Wert einlesen und dann die gesamte Zeile, in welcher der Wert stand, löschen? Okay, das dürfte kein Problem sein, aber was meinst du mit dem zweiten Absatz?

Was sind die einzelnen Schritte (bzw. das Ziel deines Vorgehens)?

Grüße, Aiko.

Hallo Aiko!

Was sind die einzelnen Schritte (bzw. das Ziel deines
Vorgehens)?

Also die Aufgabe ist folgende: Ich habe 2 Blätter in einer Mappe auf denen genau die gleiche Tabelle ist - nur unterschiedlich sortiert. Wenn nun in einem Blatt an der Tabelle etwas verändert wird, soll dies automatisch auch auf dem anderen passieren. Dazu gehört auch wenn eine komplette Zeile hinzugefügt oder gelöscht wird (mittels neue Zellen einfügen od. Zellen löschen -> Ganze Zeile).

So weit so gut. Textliche Änderungen funktionieren, Neue Zeilen auch. Damit das alles funktioniert habe ich mir eine Hilfsspalte angelegt (ID) die die Zeilen eindeutig identifiziert. Jetzt mach ich mich gerade an das „Gesamte Zeile löschen“.

Wenn ich nun eine komplette Zeile lösche, hab ich 2 Ansätze:

  1. Ich gehe alle ID’s auf beiden Blättern durch bis ich eine ID finde die NICHT auf beiden Blättern vorhanden ist.

  2. Ich merke mir die ID bevor ich die Zeile lösche und lösche dann die entsprechende Zeile auf dem anderen Blatt.

Meine Frage bezieht sich nun auf Variante 2 die ja viel schöner und übersichtlicher ist - wie krieg ich die ID der Zeile die ich gerade gelöscht habe?

Ich habe mir auch schon überlegt, einfach immer alle ID’s zu merken von den Zeilen die markiert sind - aber dafür bräuchte ich ein dynamisches Array … ich denke es gibt eine einfachere Lösung auf die ich einfach nicht komme.

Ich bin gespannt :wink: Vielen Dank!
mfg

Hallo Aiko!

Was sind die einzelnen Schritte (bzw. das Ziel deines
Vorgehens)?

Also die Aufgabe ist folgende: Ich habe 2 Blätter in einer
Mappe auf denen genau die gleiche Tabelle ist - nur
unterschiedlich sortiert. Wenn nun in einem Blatt an der
Tabelle etwas verändert wird, soll dies automatisch auch auf
dem anderen passieren. Dazu gehört auch wenn eine komplette
Zeile hinzugefügt oder gelöscht wird (mittels neue Zellen
einfügen od. Zellen löschen -> Ganze Zeile).

Wenn ich nun eine komplette Zeile lösche, hab ich 2 Ansätze:

  1. Ich gehe alle ID’s auf beiden Blättern durch bis ich eine
    ID finde die NICHT auf beiden Blättern vorhanden ist.

  2. Ich merke mir die ID bevor ich die Zeile lösche und lösche
    dann die entsprechende Zeile auf dem anderen Blatt.

Meine Frage bezieht sich nun auf Variante 2 die ja viel
schöner und übersichtlicher ist - wie krieg ich die ID der
Zeile die ich gerade gelöscht habe?

Ich habe mir auch schon überlegt, einfach immer alle ID’s zu
merken von den Zeilen die markiert sind - aber dafür bräuchte
ich ein dynamisches Array … ich denke es gibt eine
einfachere Lösung auf die ich einfach nicht komme.

Hallo Wotan.

Kenne mich mit array nicht aus und bevorzuge (auch aus anderen unternehmensinternen Gründen) eine recht einfache Programmerart. Ich hätte drei Ansätze, wie ich dein Problem lösen würde:

Variante 1:

a) Diejenige Zelle in Spalte A markieren, dessen Zeile gelscht werden soll.
b) über activecell.offset().select den Wert der ID einlesen
c) Zeile löschen
d) Tab wechseln
e) ID suchen (do until schleife)
f) zeile löschen

Variante 2:

a) Zelle mit ID anklicken
b) ID über activecell in Variable lesen und dann weiter wie bei Variante 1 ab c)

Variante 3:
a) ID per inputbox einlesen
b) Zlle mit ID per do until schleife suchen und dann weiter wie in Variante 1 ab c)

Ich meine, dass dies recht einfach zu realisieren ist. Wenn du mehrere IDs nacheinander löschen möchtest, würde ich zu der Variante mit der inputbox tendieren, wobei ich als ersten eingeben würde, wieviel IDs eingegeben werden sollen. Da müsste ich jetzt aber selbst noch mal gucken, wie das ginge.

Andererseits kannst du natürlich auch neben die entsprechende ID eine 1 schreiben und dann sortieren lassen und dann die erste Zeile löschen - dann müsstest du allerdings beide IDs suchen und dann wäre das Makro ja auch schon wieder überflüssig *dong* Wobei du diese Methode anwenden könntest, wenn du mehrere IDs löschen möchtest, in dem du das in einer Tab machst und dann die IDs über eine Schleife einlesen lässt (diese Schleife würde ich dann über die 1en laufen lassen).

Grüße, Aiko.

Hallo!

Variante 3 kommt nicht in Frage, weil die späteren Benutzer gar nichts von den ID’s wissen und damit auch komplett überfordert wären ^^

Ich komme wohl nicht drum herum, mir beim Selektieren der zu löschenden Zeilen die ID’s irgendwo zu merken …

Trotzdem vielen Dank für deinen Einsatz!

mfg

Hallo Wotan.

Du könntest natürlich auch die Sortierung angleichen und schließend beide Tabs markieren. Dann würde theoretisch in beiden Tabs gleichzeitig die Zeile gelöscht werden. Anschließend müsstest du die Sortierung wieder rückgängig machen. Das funktioniert natürlich nur, wenn beide Tabs zu 100% identisch sind. Ich würde eher dazu raten, die ID der zu löschenden Zeile in einer Variable zu speichern und dann in der anderen Tab zu suchen. Ich schätze, dass das ganze nur kurz dauern würde.

Was wäre so kompliziert, wenn du die zu löschenden Zeilen mit einer Zahl (zB 1) markierst, um anschließend das Makro zu starten. Ich kann mir nicht denken, dass spätere Nutzer das kompliziert fänden.

Frei nach dem Motto: „Einfach in Spalt XY eine „1“ schreiben und dann das Makro starten. Fertig!“ Das sollten kollegen sicher auch hinbekommen und deine ID wäre auch nicht in Benutzung. Kann natürlich sein, dass ich das mit der ID falsch verstanden habe.

Grüße, Aiko.

Hallo!

Du könntest natürlich auch die Sortierung angleichen und
schließend beide Tabs markieren.

Das finde ich ist mal eine RICHTIG GUTE IDEE! Darauf bin ich noch nicht gekommen - ich werde es dann gleich ausprobieren ob das funktioniert! :smile:

Ich würde eher dazu raten, die ID der zu
löschenden Zeile in einer Variable zu speichern und dann in
der anderen Tab zu suchen.

Das funktioniert leider nur wenn immer nur eine Zeile gleichzeitig gelöscht wird - sonst bräuchte ich ein Array, und bei dieser Lösung waren wir ja schon ^^

Ich kann mir nicht denken, dass spätere Nutzer das
kompliziert fänden.

Das verwenden später Leute die teilweise noch nie einen PC gesehen haben ^^ es soll wirklich so viel wie möglich automatisch funktionieren - sonst rufen die mich später ständig an weil sie nicht wissen wies geht ^^

Thx & mfg

Hallo Wotan.

Noch schnell für heute eine letzte Antwort vor Feierabend.

Hat es geklappt mit Sortieren?

Ich habe mal was probiert. Mit

Range(„2:2,3:3,5:5“).Select

kannst du die Zeilen 2, 3 und 5 gleichzeitig markieren. Wäre vielleicht so etwas wie ein array. Du müsstest halt dann nur die Zahlen 2,3 und 5 durch Variablen ersetzen:

Range("" & a & „:“ & a & „,“ & b & „:“ & b & „,“ & c & „:“).Select

Na ja - und a, b und c müsstest du natürlich noch bestimmen. Dies ginge wieder über eine Schleife, obwohl mir grad die letzte Idee fehlt, wie du dem Makro sagen könntest, wie viele Variablen du bräuchtest - aber möglich wäre das wahrscheinlich schon. Und hier wird es für spätere kollegen evtl. zu kompliziert (nach deinen Aussagen zu urteilen).

Bin gespannt, wie deine lösung ausschaut.

Grüße, Aiko.

Hallo!

Hab ein bisschen gebraucht, aber jetzt hab ich glaub ich eine Lösung mit der ich zufrieden sein kann :wink:

Bin gespannt, wie deine lösung ausschaut.

Und zwar markiert man beliebig viele Zeilen und klickt dann auf einen „Löschen“ Button.
Wenn draufgeklickt wird, schreibe ich mir die ID’s der markierten Zeilen in ein dynamisches Array (ja das is es wieder ^^) und merke mir die Anzhal der markierten Zeilen.
Dann lösche ich so oft wie es markierte Zeilen gibt jeweils die Zeile mit der ID im Array (Suche mit .Find). Das wiederrum ruft das Change Ereignis auf, in dem ich … (genau jetzt komm ich drauf dass das völliger blödsinn ist und ändere noch schnell was ab ^^) … Die Ereignisse sind nun ausgeschalten und ich such einfach mit Find im zweiten Blatt auch die Zeile mit der ID und lösche diese.
Funktioniert prima mit beliebig vielen Zeilen!

mfg