Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Änderungen Verfolgen Protokoll "Alter Wert"

Forumthread: VBA Änderungen Verfolgen Protokoll "Alter Wert"

VBA Änderungen Verfolgen Protokoll "Alter Wert"
15.04.2015 17:23:26
mx11
Guten Tag,
ich würde gerne alle Änderungen die in einer Excel Tabelle gemacht werden in einem Extra Blatt bzw Datei Protokollieren.
Jedoch Fehlt mir der Wert " Alter Wert ". Könnte man diesen in den Quellcode noch irgendwo _ einbinden?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count > 1 Then Exit Sub
If Sh.Name = "Protokoll" Then Exit Sub
If Intersect(Target, Sh.Range("A9:Q550")) Is Nothing Then Exit Sub
With Sheets("Protokoll")
ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Sh.Name
.Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 3) = Target.Value
.Cells(ErsteFreieZeile, 4) = Date
.Cells(ErsteFreieZeile, 5) = Time
.Cells(ErsteFreieZeile, 6) = Environ("username")
End With
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Änderungen Verfolgen
15.04.2015 17:30:33
Ralf
Hallo mx11,
ist die Datei eine Freigegebene Datei?
Denn dann kann man die Bordeigenen Mittel von Excel nutzen...
LG
Ralf

AW: VBA Änderungen Verfolgen Protokoll
15.04.2015 17:40:44
Michael
Hallo mx11!
Falls Du nicht auf integrierte Möglichkeiten zurückgreifen kannst/willst, wie Ralf geschrieben hat, müsstest Du dafür Dein Makro mit einem weiteren Ereignis-Makro kombinieren (in Folge beide):
Public AlterWert As Variant
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count > 1 Then Exit Sub
If Sh.Name = "Protokoll" Then Exit Sub
If Intersect(Target, Sh.Range("A9:Q550")) Is Nothing Then Exit Sub
With Sheets("Protokoll")
ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Sh.Name
.Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 3) = Target.Value
.Cells(ErsteFreieZeile, 4) = "Alter Wert:" & " " & AlterWert
.Cells(ErsteFreieZeile, 5) = Date
.Cells(ErsteFreieZeile, 6) = Time
.Cells(ErsteFreieZeile, 7) = Environ("username")
End With
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Sh.Name = "Protokoll" Then Exit Sub
If Not Intersect(Target, Sh.Range("A9:Q550")) Is Nothing Then
AlterWert = Target.Value
End If
End Sub
LG
Michael

Anzeige
AW: VBA Änderungen Verfolgen Protokoll
16.04.2015 17:43:18
mx11
Danke euch, hat mir sehr geholfen. Das Problem bei der integrierten Möglichkeit ist, falls 100 Änderungen gemacht werden dann hab ich diese irgendwie nicht Protokolliert sondern muss diese einzeln durchklicken und bestätigen. Deswegen denke ich das diese Möglichkeit die ich benutze die bessere ist (Falls nicht, bin ich offen für Vorschläge). Ich habe den Code noch ein bisschen angepasst, sodass nur ich die Änderungen in einem Protokoll sehen kann.
Public AlterWert As Variant
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim ErsteFreieZeile As Long
If Target.Count > 1 Then Exit Sub
If Sh.Name = "Protokoll" Then Exit Sub
If Intersect(Target, Sh.Range("A9:Q550")) Is Nothing Then Exit Sub
With Sheets("Protokoll")
ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(ErsteFreieZeile, 1) = Sh.Name
.Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
.Cells(ErsteFreieZeile, 3) = AlterWert
.Cells(ErsteFreieZeile, 4) = Target.Value
.Cells(ErsteFreieZeile, 5) = Date
.Cells(ErsteFreieZeile, 6) = Time
.Cells(ErsteFreieZeile, 7) = Environ("username")
End With
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Sh.Name = "Protokoll" Then Exit Sub
If Not Intersect(Target, Sh.Range("A9:Q550")) Is Nothing Then
AlterWert = Target.Value
End If
End Sub
Private Sub Workbook_Open()
If Environ("username") = "NAME" Then 'anpassen!
Worksheets("Protokoll").Visible = xlSheetVisible
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Protokoll").Visible = xlSheetVeryHidden
End Sub

Anzeige
Danke für die Rückmeldung! owT
17.04.2015 08:55:04
Michael
.
Anzeige
Anzeige

Infobox / Tutorial

VBA Änderungen Verfolgen: Protokoll "Alter Wert"


Schritt-für-Schritt-Anleitung

Um Änderungen in einer Excel-Tabelle zu protokollieren, kannst Du den folgenden VBA-Code verwenden. Dieser speichert den "Alter Wert" und die "neue" Änderung auf einem separaten Protokollblatt.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge einen neuen Modul hinzu, klicke mit der rechten Maustaste auf VBAProject (deineDatei.xlsm), wähle Einfügen und dann Modul.
  3. Kopiere den folgenden Code in das Modul:
Public AlterWert As Variant

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim ErsteFreieZeile As Long
    If Target.Count > 1 Then Exit Sub
    If Sh.Name = "Protokoll" Then Exit Sub
    If Intersect(Target, Sh.Range("A9:Q550")) Is Nothing Then Exit Sub
    With Sheets("Protokoll")
        ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Cells(ErsteFreieZeile, 1) = Sh.Name
        .Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
        .Cells(ErsteFreieZeile, 3) = AlterWert
        .Cells(ErsteFreieZeile, 4) = Target.Value
        .Cells(ErsteFreieZeile, 5) = Date
        .Cells(ErsteFreieZeile, 6) = Time
        .Cells(ErsteFreieZeile, 7) = Environ("username")
    End With
End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Sh.Name = "Protokoll" Then Exit Sub
    If Not Intersect(Target, Sh.Range("A9:Q550")) Is Nothing Then
        AlterWert = Target.Value
    End If
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Teste die Änderungen in deinen Zellen, um sicherzustellen, dass sie korrekt protokolliert werden.

Häufige Fehler und Lösungen

  • Fehler: "Die Protokoll-Tabelle wird nicht aktualisiert"

    • Stelle sicher, dass der Name des Protokollblatts korrekt ist und dass der Code im richtigen Modul eingefügt wurde.
  • Fehler: "Alter Wert wird nicht gespeichert"

    • Überprüfe, ob die Workbook_SheetSelectionChange-Methode richtig implementiert wurde. Diese Methode ist verantwortlich für das Speichern des alten Wertes.

Alternative Methoden

Falls Du nicht mit VBA arbeiten möchtest, kannst Du die integrierten Funktionen von Excel nutzen, um Änderungen zu verfolgen. Diese Methode erfordert jedoch, dass die Datei als freigegebene Arbeitsmappe gespeichert wird, was die Nachverfolgbarkeit der Änderungen erleichtert.


Praktische Beispiele

  1. Beispiel 1: Protokollierung in einer Verkaufsdaten-Tabelle

    • Wenn Du in einer Verkaufsdaten-Tabelle den Preis eines Produkts änderst, wird der alte Preis sowie der neue Preis im Protokoll festgehalten.
  2. Beispiel 2: Protokollierung in einer Budgetübersicht

    • Änderungen an den Budgetposten werden ebenfalls protokolliert, um eine transparente Nachverfolgung der Ausgaben zu gewährleisten.

Tipps für Profis

  • Code anpassen: Überlege, ob Du den Code anpassen möchtest, um zusätzliche Informationen wie die IP-Adresse oder andere Benutzerinformationen zu protokollieren.
  • Sichtbarkeit steuern: Du kannst den Protokoll-Tab für andere Benutzer ausblenden, um die Integrität der Daten zu wahren. Verwende dazu den folgenden Code im Workbook_Open-Event:
Private Sub Workbook_Open()
    If Environ("username") = "NAME" Then 'anpassen!
        Worksheets("Protokoll").Visible = xlSheetVisible
    End If
End Sub

FAQ: Häufige Fragen

1. Wie kann ich den Protokolltab für andere Benutzer unsichtbar machen?
Du kannst den Workbook_BeforeClose-Ereignis verwenden, um den Protokoll-Tab auszublenden.

2. Welche Excel-Version benötige ich für diese VBA-Lösungen?
Die oben beschriebenen VBA-Methoden funktionieren in Excel 2010 und späteren Versionen. Achte darauf, dass Makros in den Excel-Einstellungen aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige