Registriert seit: 01.07.2023
Version(en): Pro Plus 2019
Hallo an alle. Ich habe volgenden Code, der die Änderungen aus TB Produkte ins TB History schreibt, was auch soweit funktioniert. Wie kann ich den Code abändern, das er nur in einem bestimmten Bereich nur vorgegebene Spalten überwacht und in die History schreibt? Danke für Eure Hinweise Code: Code: Dim SaveWert As Variant, SaveSheet As String, firstEmptyRow As Long, SaveAddress As String
Private Sub Worksheet_Change(ByVal Target As Range) 'History If SaveWert > "" And Target.Cells <> SaveWert Then firstEmptyRow = Sheets("History").Cells(Cells.Rows.Count, 2).End(xlUp).Row + 1 Sheets("History").Cells(firstEmptyRow, 2) = ActiveSheet.Name Sheets("History").Cells(firstEmptyRow, 3) = SaveAddress Sheets("History").Cells(firstEmptyRow, 4) = SaveWert Sheets("History").Cells(firstEmptyRow, 5) = Target.Cells Sheets("History").Cells(firstEmptyRow, 6) = Environ("Username") Sheets("History").Cells(firstEmptyRow, 7) = Now End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 'History SaveWert = Target.Cells SaveSheet = ActiveSheet.Name SaveAddress = Target.Cells.Address
End Sub
Registriert seit: 01.07.2023
Version(en): Pro Plus 2019
Zur weiteren Info! Die Änderungen der Zellinhalte erfolgen vorrangig über ein UserForm! Manuelle Änderungen in den Zellen werden alle korrekt erfasst. Wie kann ich es umsetzen, dass er die Änderungen über die UserForm erkennt und in das TB History schreibt. Code: Private Sub Worksheet_Change(ByVal Target As Range) 'History endRow = Sheets("Produkte").Cells(Cells.Rows.Count, 2).End(xlUp).Row If Not Intersect(Target, Range("B8:M" & endRow)) Is Nothing Then If SaveWert > "" And Target.Cells <> SaveWert Then firstEmptyRow = Sheets("History").Cells(Cells.Rows.Count, 2).End(xlUp).Row + 1 Sheets("History").Cells(firstEmptyRow, 2) = ActiveSheet.Name Sheets("History").Cells(firstEmptyRow, 3) = SaveAddress Sheets("History").Cells(firstEmptyRow, 4) = SaveWert Sheets("History").Cells(firstEmptyRow, 5) = Target.Cells Sheets("History").Cells(firstEmptyRow, 6) = Sheets("Benutzer").Range("H5") Sheets("History").Cells(firstEmptyRow, 7) = Now End If End If
End Sub
Code: Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'History endRow = Sheets("Produkte").Cells(Cells.Rows.Count, 2).End(xlUp).Row If Not Intersect(Target, Range("B8:M" & endRow)) Is Nothing Then SaveWert = Target.Cells SaveSheet = ActiveSheet.Name SaveAddress = Target.Cells.Address End If
End Sub
Registriert seit: 26.09.2022
Version(en): 2019
Moin,
für den ersten Fall (Änderung im Tabellenblatt): Beachte, dass -> Target.Cells auch mehr als eine Zelle enthalten kann und deine Hilfsvariablen dann ein zweidimensionales Array beinhalten. -> du dich nicht auf ActiveSheet verlassen musst, wenn du doch Target hast -> es ungewöhnlich ist, dass du die Klasse des Target-Parameters in den Prozedurköpfen einmal mit Angabe der Klassenbibliothek und einmal ohne schreibst, -> du mit Intersect() prüfen kannst, ob sich Zellbereichsobjekte überschneiden.
für den zweiten Fall(Änderung über Userform): Du musst gar nicht mehr mit den Worksheet-Events arbeiten, du kannst einfach vorm Ändern den bisherigen und den aktuellen wert direkt in die History schreiben.
Viele Grüße derHöpp
Registriert seit: 29.09.2015
Version(en): 2030,5
16.02.2025, 13:27
(Dieser Beitrag wurde zuletzt bearbeitet: 16.02.2025, 13:27 von snb.)
Hier reicht: Code: Dim c00
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count = 1 Then c00 = Target.Value End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 Then Sheet2.Cells(Rows.Count, 2).End(xlUp).Offset(1).Resize(, 6) = Array(Target.Parent.Name, Target.Address, c00, Target.Cells, Environ("username"), Now) End Sub
Registriert seit: 01.07.2023
Version(en): Pro Plus 2019
Nur wie überwache ich bestimmte Spalten? Die Zeile finde ich über: Code: Targetstr = "(" & Range("barcode").Value & ")": If Targetstr = "" Or Range("$D$3") = "Zelle zum scannen aktivieren!" Or Range("$D$3") = "jetzt scannen ..." Then Exit Sub With Worksheets("Produkte") X = Application.Match(Targetstr, .Columns(4), 0) End With
Registriert seit: 26.09.2022
Version(en): 2019
17.02.2025, 11:13
(Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2025, 11:13 von derHoepp.)
Andyle schrieb:Nur wie überwache ich bestimmte Spalten? Mit Intersect(). Aber, wie erwähnt, wenn du Inhalte mit Hilfe einer UserForm veränderst, kannst du auch direkt eine History schreiben, ohne die Worksheet-Events zu bemühen. Was dein letzter Code mit dem Problem zu tun haben könnte, verstehe ich allerdings nicht. Die Target-Straße ist nie leer, weil du mindestens ein Klammerpaar hast. Ich würde im übrigen noch davon abraten, Exit Sub zu verwenden. Ebenso ist es meiner Ansicht nach nicht ratsam, den Doppelpunkt zu verwenden, um Zeilen zu sparen. Codezeilen kosten in der Regel kein Geld, aller Erfahrung nach erschwerst du dir damit aber die spätere Fehlersuche, weil du gegebenenfalls dein Programm schon lange verlassen hast und den Grund dafür mit einem Exit sub hinter zwei Doppelpunkte versteckt hast. Viele Grüße derHöpp
|