Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Änderungsprotokoll inkl. unveränderten Zellen

Änderungsprotokoll inkl. unveränderten Zellen
03.02.2015 15:37:42
Beatsurfer
Guten Tag
Ich komme leider bei meinem VBA nicht mehr weiter, habe leider auch nirgends was gefunden was ich mit meinen Kenntnissen zurechtzimmern könnte.
Ich habe folgendes VBA in meiner Excel Datei:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lngZeile As Long
Application.EnableEvents = False
With Worksheets("Änderungsprotokoll")
lngZeile = .Range("A65536").End(xlUp).Row + 1
.Cells(lngZeile, 1).Value = Environ("UserName") 'Änderungen_dokumentieren
.Cells(lngZeile, 2).Value = Date 'Datum
.Cells(lngZeile, 3).Value = Time & Format(hhmm) '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 = mvntWert 'vorheriger Wert
.Cells(lngZeile, 7).Value = Target.Value 'neuer Eintrag
End With
Application.EnableEvents = True
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
mvntWert = Target.Value
End Sub
Das Ganze funktioniert soweit auch einwandfrei. Nun möchte ich aber, dass wenn sich in einer Zeile ein Wert ändert auch gleich einige Zellen die nicht verändert worden sind mit dokumentiert werden.
Meine Tabelle sieht folgender massen aus:
In den Spalten B bis F Stehen Werte die nicht verändert werden.
In den Spalten I bis L verändern die Benutzer mittels Zellendropdown die Werte.
Da des öfteren neue Zeilen hinzugefügt oder gelöscht werden ist es nach einer gewissen Zeit fast unmöglich nachzuvollziehen was denn irgendwann mal in den Zellen B bis F der jeweiligen Zeile gestanden ist, da die Zellen ja "absolut" und nicht "relativ" protokolliert werden.
Mein Ziel: (Beispiel) Änderung in Zelle I5 > Protokollierung der Änderung im Änderungsprotokoll wie bisher plus den Inhalt der Zellen B5, C5, D5, E5 und F5 auch mit ins Änderungsprotokoll.
Für Euch Profis ist das bestimmt ein Kinderspiel, ich denke hier sind die richtigen Leute dafür.
Vielen Dank
Beatsurfer

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderungsprotokoll inkl. unveränderten Zellen
03.02.2015 17:05:16
yummi
Hallo Beatsurfer,
müsste so gehen:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lngZeile As Long
Application.EnableEvents = False
With Worksheets("Änderungsprotokoll")
lngZeile = .Range("A65536").End(xlUp).Row + 1
.Cells(lngZeile, 1).Value = Environ("UserName") 'Änderungen_dokumentieren
.Cells(lngZeile, 2).Value = Date 'Datum
.Cells(lngZeile, 3).Value = Time & Format(hhmm) '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 = mvntWert 'vorheriger Wert
.Cells(lngZeile, 7).Value = Target.Value 'neuer Eintrag
.Range("H" & lngZeile & ":L" & lngZeile).value = ActiveSheet.Range("B" & Target.row & ":F" &  _
Target.row)  'evtl noch .value dahinter
End With
Application.EnableEvents = True
End Sub
ungetestet, versuch mal
Gruß
yummi

Anzeige
AW: Änderungsprotokoll inkl. unveränderten Zellen
04.02.2015 08:04:45
Beatsurfer
Hallo yummi
Vielen Dank, klappt mit .Value tip top.
Mittels einer if Funktion habe ich noch hingekriegt, dass die Funktion nur im entsprechenden Sheet aktiv ist.
Ich bin im höchsten Grade zufriedengestellt.
Das fertige VBA sieht nun so aus:
Dim mvntWert As Variant
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim lngZeile As Long
Application.EnableEvents = False
If ActiveSheet.Name = "Inventarliste" Then
With Worksheets("Änderungsprotokoll")
lngZeile = .Range("F65536").End(xlUp).Row + 1
.Cells(lngZeile, 6).Value = Environ("UserName") 'Benutzername
.Cells(lngZeile, 7).Value = Environ("ComputerName") 'Workstation
.Cells(lngZeile, 8).Value = Date 'Datum
.Cells(lngZeile, 9).Value = Time & Format(hhmm) 'Zeit
.Cells(lngZeile, 10).Value = Sh.Name 'Blattname
.Cells(lngZeile, 11).Value = Target.Address 'Zelle der Änderung
.Cells(lngZeile, 12).Value = mvntWert 'alter Wert
.Cells(lngZeile, 13).Value = Target.Value 'neuer Wert
.Range("A" & lngZeile & ":E" & lngZeile).Value = Worksheets("Inventarliste").Range("B" &  _
Target.Row & ":F" & Target.Row).Value
End With
Else
With Worksheets("Änderungsprotokoll")
lngZeile = .Range("F65536").End(xlUp).Row + 1
.Cells(lngZeile, 6).Value = Environ("UserName") 'Benutzername
.Cells(lngZeile, 7).Value = Environ("ComputerName") 'Workstation
.Cells(lngZeile, 8).Value = Date 'Datum
.Cells(lngZeile, 9).Value = Time & Format(hhmm) 'Zeit
.Cells(lngZeile, 10).Value = Sh.Name 'Blattname
.Cells(lngZeile, 11).Value = Target.Address 'Zelle der Änderung
.Cells(lngZeile, 12).Value = mvntWert 'alter Wert
.Cells(lngZeile, 13).Value = Target.Value 'neuer Wert
End With
End If
Application.EnableEvents = True
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
mvntWert = Target.Value
End Sub
Vielen Dank und freundliche Grüsse
Beatsurfer

Anzeige
AW: Änderungsprotokoll inkl. unveränderten Zellen
04.02.2015 09:10:09
yummi
Hallo Beatsurfer,
freut mich wenn es passt.
Du hättest aber auch die Private Sub Worksheet_Change(ByVal Target As Range) des Tabellenblattes "Änderungsprotokoll" benutzen können. (rechtsklick auf den reiter und code anzeigen, dann von Allgemein auf worksheet umstellen und change auswählen)
Dann sparst du dir die Unterscheidung auf welchem Tabellenblatt du dich befindest.
Gruß
yummi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige