Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1056to1060
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

Problem beim Zeilen löschen

Problem beim Zeilen löschen
03.03.2009 23:16:36
Gordon
Moin,
ich habe eine Datei, wo folgender Code im Hintergrund liegt:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rC, rg As Range
Application.EnableEvents = False
For Each rC In Target
If rC.Value = Worksheets(ActiveSheet.Name & " (2)").Cells(rC.Row, rC.Column).Value Then
Worksheets(ActiveSheet.Name & " (2)").Cells(rC.Row, rC.Column).Copy
rC.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=  _
_
False
Else
rC.FormatConditions.Delete
rC.Interior.ColorIndex = 6
End If
Next rC
If Not Intersect(Target, Columns("H:H")) Is Nothing Then
For Each rg In Target
If Len(rg.Value) > 4 Then
rg.Value = Right(rg.Value, 4)
End If
Next rg
End If
Application.EnableEvents = True
End Sub


Zur Erklärung:
Ich habe ein Blatt und eine (versteckte) Kopie des Blattes. Sobald jemand einen Teil des Blattes ändert, wird das Blatt mit der Kopie verglichen und bei ungleichheit wird auf dem Blatt die Zelle gelbmakiert. Sobald der ursprüngliche Wert wieder da steht, wird die Zelle wieder weiß. Des Weiteren werden dabei auch "bedingte Formatierungen" gelöscht und wiederhergestellt.
Dazu werden Eingaben in der Spalte "H" auf die letzten 4 Zeichen reduziert.
Das lief nun alles auch wunderbar....nun habe ich aber mal geschaut was passiert, wenn manganze Zeilen einfügt und wieder löscht. Beim einfügen passierte nichts schlimmeres, aber beim löschen ging das makro dann jede Zeile durch bis es zur letzten Zeile kommt, danach meckert das Makro dann auch noch an folgernder Code Zeile: If Len(rg.Value) > 4 Then
So, hat jemand 'ne Idee, woran das genau liegt und wie man es umgehen könnte? Kann man es vielleicht umgehen, in dem man sagt, dass wenn eine Zeile gelöscht/eingefügt wird, dass dieses auch bei der Kopie geschehen soll?
Hat jemand einen Plan? Wäre sehr sehr dankbar!
Beste Grüße
Gordon

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

Betreff
Datum
Anwender
Anzeige
AW: Problem beim Zeilen löschen
04.03.2009 12:23:33
fcs
Hallo Gordon,
der synchrone Vergleich/Abgleich von 2 Tabellen ist nicht ganz einfach.
Außer den von dir bereits beobachteten Problemen passieren beim Einfügen und/oder Löschen von Zeilen in der Tabelle 1 mit deinem Makro noch einige viel schlimmere Sachen.
Die Zeilen in den beiden Tabellen sind nicht mehr synchron, d.h. sie verschieben sich gegeneinander. Somit ist ein Werte-Abgleich gar nicht mehr möglich.
Eigentlich kriegt man so etwas nur sauber in den Griff, wenn man in jeder Tabelle eine Spalte hat, die jede Zeile eindeutig kennzeichnet (Schlüsselfeld), z.B. eine automatisch generierte Zählnummer.
Über die Suchen-Funktion (Find unter VBA) kann man in der 2. Tabelle dann die zugehörige Zeile finden und die Daten vergleichen und gewünschte Aktionen durchführen. Neue Zeilen kann man dann ergänzen, gelöschte Zeilen ggf. in Tabelle ..(2) kennzeichnen.
Gruß
Franz
Anzeige
AW: Problem beim Zeilen löschen
04.03.2009 20:44:06
Gordon
Hmm,
verstehe. Heißt jeder Eintrag bekommt sozusagen eine ID, damit er immer auf der Kopie zugeordnet werden kann.
Wenn ich jetzt also in die Spalte "BB" laufende, eindeutige Nummern eintrage, wie müsste dann der Code verändert werden, damit es läuft? Bin da leider gerade etwas überfordert. Worksheet_Change ist für mich immer noch recht schwer.
Gruß
Gordon
AW: Problem beim Zeilen löschen
05.03.2009 13:51:22
fcs
Hallo Gordon,
hier mal eine Beispiel-Datei.
https://www.herber.de/bbs/user/60010.xls
Die Zeilen-Nummern werden automatisch vergeben als fortlaufende Nummer. Du muss in deiner vorhandenen Datei einmal vor dem Einbauen des Makros die Zeilen in der Spalte BB durchnummerieren.
Beim Einfügen von Leerzeilen passiert zunächst nichts weiter. Sobald du einen Wert in der Leerzeile eingibst wird die Datensatznummer erzeugt und in beiden Blättern eingetragen.
Beim Kopieren von Daten in eine Leerzeile die Datensatznummer nicht mitkopieren!! Oder nach dem Kopieren die Nummer löschen, um eine neue Nummer zu generieren.
Bei neuen / kopierten Zeilen werden alle Zellen mit Inhalten als geändert gekennzeichnet, da die Zeile in der Vergleichstabelle außer der Datensatznummer ja keine weiteren Daten enthält.
Ich hab auch eien Prozedur eingefügt mit der du alle Änderungen im Blatt akzeptieren und die Markierungen zurücksetzen kannst. Dabei werden dann alle aktuellen Werte im Blatt in die Vergleichstabelle geschrieben.
Du kannst die Datentabelle jetzt auch beliebig sortieren.
Gruß
Franz
Anzeige
AW: Problem beim Zeilen löschen
09.03.2009 16:18:07
Gordon
Hallo Franz,
ich konnte mich inzwischen nun mit deiner Datei beschäftigen. Super Sache...hat mir echt an vielen Stellen weiter geholfen. Habe den Code so übenrommen und nur an einigen stellen verändert, wo es hakte oder ich noch etwas ergänzen wollte. Nur leider hat sich nun ein Problem aufgetan:
Und zwar soll es ja so laufen, dass in der Spalte "G" (bei deiner Datei war es noch H) die die Eingabe auf die letzten vier Zeichen gekürzt wird. Und das ab einschließlich Zeile 6 abwärts. Der Code sieht nun so aus:

Private Sub Worksheet_Change(ByVal Target As Range)
'Werte in Spalte G einkürzen
If Not Intersect(Target, Columns("G:G")) Is Nothing And Target.Row > 5 Then
For Each rG In Target.Columns("G:G")
If Len(rG.Value) > 4 Then
rG.Value = Right(rG.Value, 4)
End If
Next rG
End If


Leider funktioniert das irgendwie nicht....es passiert gar nicht, wenn ich etwas in Spalte G eingebe...woran kann das liegen?
Gruß
Gordon

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige