Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Fahrtenbuch - Veränderungen protokollieren





Frage

Guten Morgen! Der Bundesfinanzhof (BFH) hat kürzlich folgendes Urteil gefällt: http://www.steuerlinks.de/bfh-vir-64-04.html Da wir Excel für das Fahrenbuch verwenden möchte in Zukunft "Veränderungen" protokollieren. Wie kann ich dies am besten umsetzen? Schon mal ein DANKESCHÖN für die Tipps und Anregungen. Klaus P.S.: Das Tabellenblatt ich teilweise schreibgeschützt.

Antwort 1 von coros

Hallo Kalus,

was für Veränderungen sollen denn protokolliert werden? Wo sollen diese protokollierten Änderungen aufgeführt werden? Du müsstest schon etwas genauer werden, was Du haben möchtest.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von TomG

Excel wird m.M. nach vom Finanzamt nicht mehr akzeptiert.

Gruß
Thomas

Antwort 3 von meine_Frage

Hi!

@coros:
Wenn möglich sollten die Veränderungen in der Exceltabelle selbst protokolliert werden.

Jede Veränderung am Excel-Formular soll pro Monat mitgeschrieben werden.

Wenn z. B. der Tachostand mit einem Ziffernsturz eingeben wird, dann soll neben der ersten Eignabe auch die Korrektur mitgeschrieben werden.
Enter pro Zelle = Eintrag in dem Protokoll?!?

Formeln selbst können nicht verändert werden = Blattschutz.

...............

In wieweit das Finanzamt Excel noch akzeptiert ist meiner Meinung nach abzuwarten.
Wenn z. B. der Kalendereintrag mit den Excel-Aufzeichnungen korrespondiert, könnte es lt. diversen Erläuterungen sein, dass die Aufzeichnungen doch anerkannt werden.

Vielleicht gibt es auch weniger Probleme seitens des Finanzamtes, wenn der Privat-PKW für dienstliche Zwecke (wie in meinem Fall) genutzt wird und nicht umgekehrt.

Klaus

Antwort 4 von coros

Hallo Klaus,

nachfolgend nur mal ein Beispielcode, da ich den Aufbau Deines Fahrtenbuches nicht kenne. Kopiere den Code in das VBA Projekt des Tabellenblattes, in dem Du die Daten einträgst und die dann dokumentiert werden sollen.

Option Explicit

Public Alter_Eintrag As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Alter_Eintrag <> "" And Target.Cells <> Alter_Eintrag And Target.Column >= 1 And Target.Column <= 4 Then
Cells(Target.Row, Range("IV" & Target.Row).End(xlToLeft).Column + 1) = "Der alte Eintrag " & Alter_Eintrag & " wurde durch den neuen Eintrag " & _
Cells(Target.Row, Target.Column) & " am/ um " & Now & " ersetzt"
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Alter_Eintrag = Target.Cells
End Sub


Hier wird, wenn in den Spalten A bis D etwas eingetragen wird verglichen, ob der neue Wert vom alten abweicht. Wenn ja, wird in der gleichen Zeile wie die Änderung erfolgte, in der ersten freien Spalte (ab Spalte E) , ein Text mit dem alten und dem neuen Wert und Datum Uhrzeit ausgegeben. Bei einer erneuten Änderung in der Zeile, wird diese Änderung eine Spalte weiter dokumentiert. Das bedeutet, das bei jeder Änderung in einer Zeile/ Zelle, die Dokumentation nebeneinander in der gleichen Zeile aufgeführt wird.

Teste das mal in einer Beispieldatei und schau Dir das mal an. Für einen genaueren Code benötigt man mehr Infos über den Aufbau Deiner Datei.

Ich hoffe, Du kommst klar. Bei Fragen melde Dich.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 2 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 5 von meine_Frage

Hallo Oliver!

Funktioniert gut.

2 Probleme:
Meine Eingabespalten sind B, C, H, I, K, L und M
Wie muss ich Deinen Code anpassen um dies zu erhalten?

Weiters ist die erste freie Spalte T wo die Protokollierung stattfinden kann.

Wie bereits kurz erwähnt ist die Tabelle zum Großteil schreibgeschützt, sodass die Protokollierung im schreibgeschützten bereich stattfinden soll.

Auf die Schnelle fällt mir nur ein, bei diverse Spalten den Schreibschutz zu entfernen und dann diese auszublenden.
Gibt es eine andere Möglichkeit?

Klaus

Kann die Datei auch gerne mailen. Leider aber erst ab kommenden Montag.

Antwort 6 von coros

Hallo Klaus,

mit nachfolgendem Code sollte es funktionieren. Kopiere den in das VBA Projekt des Tabellenblattes, in dem die Änderungen dokumentiert werden sollen.

Option Explicit

Public Alter_Eintrag As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Alter_Eintrag <> "" And Target.Cells <> Alter_Eintrag And Not Intersect(Target, [B1:C65536, H1:I65536, K1:L65536, M1:M65536]) Is Nothing Then
    With ActiveSheet
    .Unprotect "Hier Dein Blattschutzpasswort"
        If .Range("IV" & Target.Row).End(xlToLeft).Column + 1 < 20 Then
            .Cells(Target.Row, 20) = "Der alte Eintrag " & Alter_Eintrag & " wurde durch den neuen Eintrag " & _
            .Cells(Target.Row, Target.Column) & " am/ um " & Now & " ersetzt"
        Else
            Cells(Target.Row, Range("IV" & Target.Row).End(xlToLeft).Column + 1) = "Der alte Eintrag " & Alter_Eintrag & " wurde durch den neuen Eintrag " & _
            Cells(Target.Row, Target.Column) & " am/ um " & Now & " ersetzt"
        End If
    .Protect "Hier Dein Blattschutzpasswort"
    End With
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Alter_Eintrag = Target.Cells
End Sub


Du musst noch in den Zeilen

    .Unprotect "Hier Dein Blattschutzpasswort"


und

    .Protect "Hier Dein Blattschutzpasswort"


dort wo der Text "Hier Dein Blattschutzpasswort" steht, Dein Blattschutzpasswort eintragen. Lösche aber bitte dabei nicht die Anführungszeichen (""), das Passwort gehört dazwischen. Ansonsten macht der Code das, was Du Dir vorgestellt hast. Jedenfalls bin ich der Meinung.

Sollte es Probleme geben, melde Dich bitte.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 7 von meine_Frage

Hallo Oliver!

Habe Deinen VBA-Code in mein Excelblatt kopiert und trotz meiner geringer Kenntnisse angepasst. (Funktionsbereiche adaptiert)

Trotzdem dürfte ich dabei was falsch gemacht haben, da nur die Veränderungen in der Spalte B "protokolliert" werden.
Änderungen in den anderen nicht geschützten Bereichen werden nicht festgehalten.

Vielleicht hast Du noch einen Tipp für mich.

Klaus

Antwort 8 von coros

Hallo Klaus,

warum führst Du dann Deinen angepassten VBA- Code hier nicht mit auf? Ohne den brauche ich erst gar nicht versuchen Dir helfen zu wollen, da meiner aus Antwort 6 funktioniert. Der Fehler muss in Deinem angepassten Code liegen. Jedenfalls vermute ich das mal ganz stark.

Schreibe also Deinen angepassten VBA- Code hier mal hin und dann wird es sicherlich eine Lösung geben.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 9 von meine_Frage

Guten Morgen!

Hier mein adaptierter Code.
Option Explicit

Public Alter_Eintrag As Variant

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Alter_Eintrag <> "" And Target.Cells <> Alter_Eintrag And Not Intersect(Target, [B14:C40, H14:I40, K14:L40, M14:M40]) Is Nothing Then
With ActiveSheet
.Unprotect Password:="123abc"
If .Range("IV" & Target.Row).End(xlToLeft).Column + 1 < 20 Then
.Cells(Target.Row, 20) = "Der alte Eintrag " & Alter_Eintrag & " wurde durch den neuen Eintrag " & _
.Cells(Target.Row, Target.Column) & " am/ um " & Now & " ersetzt"
Else
Cells(Target.Row, Range("IV" & Target.Row).End(xlToLeft).Column + 1) = "Der alte Eintrag " & Alter_Eintrag & " wurde durch den neuen Eintrag " & _
Cells(Target.Row, Target.Column) & " am/ um " & Now & " ersetzt"
End If
.Protect Password:="123abc"
End With
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Alter_Eintrag = Target.Cells
End Sub


Als Passwort habe ich mal einfach ein paar Zeichen hineingeschrieben.

Kann es sein, dass die Funktionalitaet unter Office2000 und Office2003 unterschiedlich ist?

Klaus

Antwort 10 von coros

Hallo Klaus,

sorry, dass ich erst jetzt antworte, aber ich war leider verhindert.

Wenn ich Deinen Code mal in eine Excelmappe kopiere und diesen ausführe, funktioniert genau dass, was passieren soll. Es wird jede Änderung in dem im Code angtegebenen Bereich protokoliert.
Egal, ob ich diesen Code in Excel 2000, Excel 2002 oder Excel 2003 einsetze. Ergebnis, bei allen 3 Versionen funktioniert er.
Kann es eventuell an Deiner Datei liegen? Besteht die Möglichkeit, mir diese mal zu schicken?
Also wenn Du willst/ darfst, dann schicke mir die Datei per E-Mail. Die Mailadresse findest Du auf meiner HP u. a. im Impressum. Binde in der Betreffzeile irgendwie das Wort "Supportnet" und den Namen (Nickname), unter dem Du hier gepostet hast mit ein, da ich alle Mails deren Absender ich nicht kenne, ungelesen lösche.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: