Clever-Excel-Forum

Normale Version: Einträge kopieren und löschen, wenn Eintrag erfolgt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich habe eine Datei zur Verwaltung und Ausgabe von Gebieten. Die drei Spalten E, F und G beziehen sich auf den aktuellen Bearbeiter des Gebietes. Die Spalten C und D stellen den jeweils letzten Bearbeiter dar sowie das Datum, an dem er es mir zurückgegeben hat.
Nun möchte ich mir händisches Eingreifen ersparen. Ist es möglich, dass, sobald ich ein neues Datum in Spalte G eintrage (das Gebiet also vom akt. Bearbeiter zurückgegeben wurde), dieses in Spalte D kopiert wird? Und bei der Gelegenheit dann auch E in C. Danach sollen die drei Spalten E, F und G bereinigt werden.
Ich hoffe, ich habe es verständlich formuliert. Ich denke, mit einem Makro sollte das möglich sein, oder? Bin da leider noch Neuling. Vielen Dank vorab für eure Hilfe!


Viele Grüße,
Christian
Das ins Tabellenblatt
Schnell geschrieben, müsste gehen


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G:G")) Is Nothing Then kopieren
End Sub

Sub kopieren()
Set merker = ActiveCell

With Worksheets("Tabelle1")
Range("E2:E2000").Copy
Range("C2:C2000").PasteSpecial Operation:=xlPasteSpecialOperationNone, SkipBlanks:=True, Transpose:=False
Range("G2:G2000").Copy
Range("D2:D2000").PasteSpecial Operation:=xlPasteSpecialOperationNone, SkipBlanks:=True, Transpose:=False
Range("E2:E2000,F2:F2000, G2:G2000").Clear
merker.Select
End With

End Sub
Hallo Davidp,

vielen Dank für deine Hilfe. Vom Ansatz her scheint es gut zu sein, jedoch stürzt Excel am Ende ab, weil er nach dem Prozess abwechselnd die Spalte C und D markiert in Endlosschleife. Wie kann man das noch beheben oder woran liegt das?

Viele Grüße,
Christian
Moin!
Ja, das Makro ruft sich immer wieder selbst auf.
Deshalb schaltet man die Events temporär aus.
Aber Vorsicht!
So etwas sollte man immer mit Fehlerbehandlung machen:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrExit
If Not Intersect(Target, Range("G:G")) Is Nothing Then
  Application.EnableEvents = False
  kopieren
End If
ErrExit:
Application.EnableEvents = True
End Sub

Gruß Ralf
Hallo zusammen!

Ralf, vielen Dank, dieser Fehler ist dadurch schonmal beseitigt. Nur ist mir jetzt noch ein weiteres Problem aufgefallen. Die Aktion bezieht sich ja nun immer auf die ganze Spalte. Das heißt, das mit einem Gebiet, das ich zurückbekomme, auch alle anderen Daten in anderen Zeilen überschrieben werden, was ja nicht sein soll. Es müsste eigentlich immer nur die Aktion in der Zeile bewirken, in der gerade das Rückgabedatum in G eingetragen wurde. Dazu jemand eine Idee?

Gruß