HERBERS Excel-Forum - das Archiv
Änderungen Dokumentieren Nr2
Alexander

Hallo Leute
Habe im Beitrag schon ein paar fragen gestellt nun habe ich alles eingefügt und alles passt.
https://www.herber.de/forum/archiv/1432to1436/t1435248.htm
Jetzt sind wir bei Zeile 499 und jetzt wird jedoch nur noch die Zeile 2 beschrieben.

Könnt Ihr mir noch ein bisschen helfen?
Gruss ALex
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lngZeile As Long
Application.EnableEvents = False
With Worksheets("Änderungen_dokumentieren")
lngZeile = .Range("A65536").End(xlUp).Row + 1
If lngZeile > 499 Then lngZeile = 2 ' oder 1, falls keine Überschrift vorh.
.Cells(lngZeile, 1).Value = Environ("UserName") 'Änderungen_dokumentieren
.Cells(lngZeile, 2).Value = Date 'Datum
.Cells(lngZeile, 3).Value = Time 'Zeit
.Cells(lngZeile, 4).Value = Sh.Name 'Blattname, auf dem geändert wurde
.Cells(lngZeile, 5).Value = Target.Address 'Zelle der Änderung
.Cells(lngZeile, 6).Value = oldValue 'vorheriger Wert
.Cells(lngZeile, 7).Value = Target.Value 'neuer Eintrag
End With
Application.EnableEvents = True
End Sub

AW: Änderungen Dokumentieren Nr2
Michael

Hi Alex,
es wäre mir lieber gewesen, wenn Du meinen Vorschlag zur Ermittlung der untersten Zeile übernommen hättest...
[DeineVariable] = .Cells(Rows.Count, 1).End(xlUp).Row + 1

... oder so, wenn Dir Range besser gefällt ...
lngZeile = .Range("A" & Rows.Count).End(xlUp).Row + 1
...denn das ist völlig unabhängig von der Excel-Version.
Aber egal.
Das Problem ist mir völlig logisch: durch das Schreiben der neuen Werte in Zeile 2 wird ja die Anzahl der beschriebenen Zeilen nicht geändert, d.h. es sind dann immer mehr als 499.
Am besten ist, Du schreibst den Wert unter die unterste, ermittelte Zeile und löschst anschließend die Zeile 2.
Ich denke, das ist zeitkritisch: wenn Du bei jeder Änderung löschst, hat Excel reichlich zu tun!
Deshalb solltest Du vielleicht gleich immer 50 Zeilen in einem Rutsch löschen oder so.
Also etwa so (ungetesteter Ausschnitt):
With Worksheets("Änderungen_dokumentieren")
lngZeile = .Range("A" & Rows.Count).End(xlUp).Row + 1
If lngZeile > 499 Then
.Rows("2:50").Delete
lngZeile = .Range("A" & Rows.Count).End(xlUp).Row + 1
end if
.Cells(lngZeile, 1).Value = Environ("UserName") 'Änderungen_dokumentieren
.Cells(lngZeile, 2).Value = Date 'Datum
.Cells(lngZeile, 3).Value = Time 'Zeit
.Cells(lngZeile, 4).Value = Sh.Name 'Blattname, auf dem geändert wurde
.Cells(lngZeile, 5).Value = Target.Address 'Zelle der Änderung
.Cells(lngZeile, 6).Value = oldValue 'vorheriger Wert
.Cells(lngZeile, 7).Value = Target.Value 'neuer Eintrag
End With
Schöne Grüße,
Michael

AW: Änderungen Dokumentieren Nr2
Alexander

Danke Michael
Ja habe gedacht das ist was ganz anderes, Entschuldigung.
Habe jetzt deine Version vom ersten Forumeintrag genommen.
Die Funktioniert super ...danke.
Somit erledigt

freut mich, danke für die Rückmeldung owT
Michael

Änderungen Dokumentieren Nr2
Alexander

Hallo Leute
Habe im Beitrag schon ein paar fragen gestellt nun habe ich alles eingefügt und alles passt.
https://www.herber.de/forum/archiv/1432to1436/t1435248.htm
Jetzt sind wir bei Zeile 499 und jetzt wird jedoch nur noch die Zeile 2 beschrieben.

Könnt Ihr mir noch ein bisschen helfen?
Gruss ALex
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lngZeile As Long
Application.EnableEvents = False
With Worksheets("Änderungen_dokumentieren")
lngZeile = .Range("A65536").End(xlUp).Row + 1
If lngZeile > 499 Then lngZeile = 2 ' oder 1, falls keine Überschrift vorh.
.Cells(lngZeile, 1).Value = Environ("UserName") 'Änderungen_dokumentieren
.Cells(lngZeile, 2).Value = Date 'Datum
.Cells(lngZeile, 3).Value = Time 'Zeit
.Cells(lngZeile, 4).Value = Sh.Name 'Blattname, auf dem geändert wurde
.Cells(lngZeile, 5).Value = Target.Address 'Zelle der Änderung
.Cells(lngZeile, 6).Value = oldValue 'vorheriger Wert
.Cells(lngZeile, 7).Value = Target.Value 'neuer Eintrag
End With
Application.EnableEvents = True
End Sub

AW: Änderungen Dokumentieren Nr2
Michael

Hi Alex,
es wäre mir lieber gewesen, wenn Du meinen Vorschlag zur Ermittlung der untersten Zeile übernommen hättest...
[DeineVariable] = .Cells(Rows.Count, 1).End(xlUp).Row + 1

... oder so, wenn Dir Range besser gefällt ...
lngZeile = .Range("A" & Rows.Count).End(xlUp).Row + 1
...denn das ist völlig unabhängig von der Excel-Version.
Aber egal.
Das Problem ist mir völlig logisch: durch das Schreiben der neuen Werte in Zeile 2 wird ja die Anzahl der beschriebenen Zeilen nicht geändert, d.h. es sind dann immer mehr als 499.
Am besten ist, Du schreibst den Wert unter die unterste, ermittelte Zeile und löschst anschließend die Zeile 2.
Ich denke, das ist zeitkritisch: wenn Du bei jeder Änderung löschst, hat Excel reichlich zu tun!
Deshalb solltest Du vielleicht gleich immer 50 Zeilen in einem Rutsch löschen oder so.
Also etwa so (ungetesteter Ausschnitt):
With Worksheets("Änderungen_dokumentieren")
lngZeile = .Range("A" & Rows.Count).End(xlUp).Row + 1
If lngZeile > 499 Then
.Rows("2:50").Delete
lngZeile = .Range("A" & Rows.Count).End(xlUp).Row + 1
end if
.Cells(lngZeile, 1).Value = Environ("UserName") 'Änderungen_dokumentieren
.Cells(lngZeile, 2).Value = Date 'Datum
.Cells(lngZeile, 3).Value = Time 'Zeit
.Cells(lngZeile, 4).Value = Sh.Name 'Blattname, auf dem geändert wurde
.Cells(lngZeile, 5).Value = Target.Address 'Zelle der Änderung
.Cells(lngZeile, 6).Value = oldValue 'vorheriger Wert
.Cells(lngZeile, 7).Value = Target.Value 'neuer Eintrag
End With
Schöne Grüße,
Michael

AW: Änderungen Dokumentieren Nr2
Alexander

Danke Michael
Ja habe gedacht das ist was ganz anderes, Entschuldigung.
Habe jetzt deine Version vom ersten Forumeintrag genommen.
Die Funktioniert super ...danke.
Somit erledigt

freut mich, danke für die Rückmeldung owT
Michael

Bewerten Sie hier bitte das Excel-Portal