Alte Zellwerte bei Zellwertänderung archivieren

Bild

Betrifft: Alte Zellwerte bei Zellwertänderung archivieren
von: Christoph
Geschrieben am: 18.05.2015 15:32:21

Hallo liebes Forum,
ich habe folgenden Sub zusammen geschrieben/kopiert.


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
If Not Intersect(Range("J10:J1000"), Target) Is Nothing Then
   ActiveSheet.Unprotect "heute"
   Target.Offset(0, 1).Value = Date
   ActiveSheet.Protect "heute"
Else
    If Not Intersect(Target, Range("Z10:Z100")) Is Nothing Then
       ActiveSheet.Unprotect "heute"
       Target.Offset(0, 1) = Target.Offset(0, 1) + 1
       ActiveSheet.Protect "heute"
    If Intersect(Target, Range("Z10:Z101")) Is Nothing Then Exit Sub
    ActiveSheet.Unprotect "heute"
    Cells(Cells(Rows.Count, Target.Row - 8).End(xlUp).Row + 1, Target.Row - 8) = Target.Value
    ActiveSheet.Protect "heute"
    End If
End If
End Sub

Interessant wird es gerade bei der Archivierung der Daten. Ich habe ein Feld in dem Datumsangaben von Kundenbesuchen hinterlegt werden und möchte jedesmal wenn ein Datum neu eingegeben wird, das alte in einem extra Sheet hinterlegen lassen.
If Intersect(Target, Range("Z10:Z101")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect "heute"
Cells(Cells(Rows.Count, Target.Row - 8).End(xlUp).Row + 1, Target.Row - 8) = Target.Value
ActiveSheet.Protect "heute"
End If
Innerhalb eines Blattes funktioniert der Code wunderbar. Allerdings bin ich noch sehr unbedarft im Umgang mit VBA und weiß nicht wie ich die Archivierung in einem extra Blatt hinbekomme. Zusätzlich wäre es noch gut wenn ich das Datum mit dem Namen des Außendienstmitarbeiters zusammen bekommen könnte. Die Namen sind nochmal in einer extra Spalte aufgeführt.
Lieben Dank für die Hilfe im Vorraus und viele Grüße,
Christoph

Bild

Betrifft: AW: Alte Zellwerte bei Zellwertänderung archivieren
von: Christoph
Geschrieben am: 20.05.2015 08:47:26
Hallo, ist die Frage zu spezifisch?
Das wichtigste wäre das mir die hier ausgegebenen Werte
If Intersect(Target, Range("Z10:Z101")) Is Nothing Then Exit Sub
ActiveSheet.Unprotect "heute"
Cells(Cells(Rows.Count, Target.Row - 8).End(xlUp).Row + 1, Target.Row - 8) = Target.Value
ActiveSheet.Protect "heute"
End If
in ein extra Blatt kommen. Kann mir da wirklich niemand helfen oder stimmt etwas mit dem Post nicht?
Danke und viele Grüße,
Christoph

Bild

Betrifft: AW: Alte Zellwerte bei Zellwertänderung archivieren
von: Michael
Geschrieben am: 20.05.2015 15:25:01
Hallo Christoph,
füge doch mal das da anstelle Deiner Zeile mit Cells(cells usw. ein:

       With Sheets("Archiv")
         z = .Range("G1")
         .Range("G1") = .Range("G1") + 1
         .Range("A" & z) = Target.Value
         .Range("B" & z) = Target.Offset(0, 2).Value
         .Range("C" & z) = Target.Offset(0, 1).Value
       End With


Bild

Betrifft: AW: Alte Zellwerte bei Zellwertänderung archivieren
von: Christoph
Geschrieben am: 21.05.2015 15:57:06
Hi, Michael, ein dickes Danke! funktioiniert soweit so gut.
Allerdings versteh ich nicht wie du die auszugebenden Zellen addressiert hast.
Der Kundenname den ich noch bräuchte ist in Spalte E untergebracht.
Der Außendienstler befindet sich in Spalte N.
Wie müsste man denn da noch umschreiben?
Danke und viele Grüße,
Christoph

Bild

Betrifft: AW: Alte Zellwerte bei Zellwertänderung archivieren
von: Michael
Geschrieben am: 21.05.2015 17:42:05
Hallo Christoph,
ich sehe halt Deine Daten nicht, aber Target.Offset(reihe,spalte).Value holt sich die Daten aus der Zelle, die reihe Zeilen darunter bzw. spalte Spalten rechts daneben liegt.
Hilft Dir das?
Schöne Grüße,
Michael

Bild

Betrifft: sorry, wollte noch nicht absenden
von: Michael
Geschrieben am: 20.05.2015 15:30:05
Ja, also, das Teil kopiert drei Zellen (target und die zwei rechts daneben) ins sheet "Archiv", wobei ich zu Testzwecken einfach in G1 eine Zeilennummer reingesteckt habe. z kann man natürlich auch anders ermitteln, aber das weißt Du ja.
Ich hätte erwartet, daß offset(0,-1) auch geht, aber mein X2000 hat gezickt, also verwende schlimmstenfalls eben positive Werte.
Du kannst den Code natürlich auch an der Stelle einfügen, *bevor* Du Änderungen vornimmst, dann hast Du die gewünschte "Archiv-Funktion".
Schöne Grüße,
Michael

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Alte Zellwerte bei Zellwertänderung archivieren"