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.
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
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
@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.
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.
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.
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.
Du musst noch in den Zeilen
und
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.
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
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.
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
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.
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.