Hallo Philip! Kam nicht früher dazu, also jetzt mal eine Variante (läuft eh nur Fußball :-) ). Zumindest unter meiner Testumgebung funktioniert sie. Weiß nicht genau, wie deine aussieht und wie du sie im Detail nutzen willst. Also die Variante läuft wie folgt: Wenn du das Blatt mit deinen Daten aktivierst, werde alle Eintragungen zwischengespeichert. Ändert sich jetzt ein Wert (außer der Lifefertermin) bzw.. mehrer Zellen (wobei hier Liefertermin dabei sein kann), werden wieder alle Daten gespeichert. Sollte sich der Liefertermin ändern, werden die ersten 5 Spalten der Daten + Liefertermin in das Blatt Protokoll als letzter Eintrag übernommen. Dann kommt eine freie Spalte und dann die 6 gewünschten Daten aus dem "Speicher" und dann das aktuelle Datum und Uhrzeit. Probiere mal, ob es so ist, wie du willst. AChja, den Code unter das Blatt mit deinen Daten (da wo sich alles ändert) eintragen. VG
Option Explicit
Public altewerte
Private Sub Worksheet_Activate()
Dim letzte As Long
Dim neu
letzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
altewerte = ActiveSheet.Range("A1:M" & letzte)
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim letzte As Long
Dim zeile As Long
Dim zeile2 As Long
Dim i As Long
letzte = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
If Target.Count > 1 Then
letzte = ActiveSheet.Cells(Rows.Count, 12).End(xlUp).Row
altewerte = ActiveSheet.Range("A1:M" & letzte)
Else
If Not Intersect(Target, ActiveSheet.Columns(12)) Is Nothing Then
zeile = Target.Row
zeile2 = Worksheets("Protokoll").Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.Range(ActiveSheet.Cells(zeile, 1), ActiveSheet.Cells(zeile, 6)).Copy Worksheets("Protokoll").Range("A" & zeile2 + 1)
ActiveSheet.Range("L" & zeile).Copy Worksheets("Protokoll").Range("G" & zeile2 + 1)
'altewerte dahintereinfügen
For i = 1 To 6
Worksheets("Protokoll").Cells(zeile2 + 1, 8 + i) = altewerte(zeile, i)
Next i
Worksheets("Protokoll").Cells(zeile2 + 1, 15) = altewerte(zeile, 12)
Worksheets("Protokoll").Cells(zeile2 + 1, 16) = Now
Worksheets("Protokoll").Columns(16).AutoFit
Else
altewerte = ActiveSheet.Range("A1:M" & letzte)
End If
End If
End Sub
|