Hallo,
gibt es eine Möglichkeit, Änderungen in Excel zu protokollieren?
Dieses darf nicht vom „Normal-User“ ausschaltbar sein. Dh. diese
Änderungsverfolgungsfunktion von Excel ist wohl nicht geeignet.
Hat jemand eine Idee?
Danke
Tom
Hallo,
gibt es eine Möglichkeit, Änderungen in Excel zu protokollieren?
Dieses darf nicht vom „Normal-User“ ausschaltbar sein. Dh. diese
Änderungsverfolgungsfunktion von Excel ist wohl nicht geeignet.
Hat jemand eine Idee?
Danke
Tom
Hallo,
eine Idee ist vielleicht den Arbeitsmappenschutz noch darüber zu setzen wobei die zu ändernden Felder entsperrt werden müssen.
Bin aber nicht sicher.
Gruß
Lilli
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
nein das ist es nicht. Ich möchte nicht gegen Veränderungen schützen sondern Veränderungen protokolieren.
Tom
gibt es eine Möglichkeit, Änderungen in Excel zu
protokollieren?
Dieses darf nicht vom „Normal-User“ ausschaltbar sein. Dh.
diese Änderungsverfolgungsfunktion von Excel ist wohl nicht
geeignet.
Hi Tom,
nachfolgenden Code fand ich im Internet, allerdings, persönliche Daten zu speichern ist ohne Einverständnis der User nicht legal.
Getestet habe ich den Code und meinen Code nicht.
Jetzt bliebe noch die Möglichkeit dass der Benutzer beim Start die Makros nicht aktiviert. Dies liesse sich z.B. so beeinflussen:
Ins Modul „DieseArbeitsmappe“ folgenden Code:
Private Sub Workbook\_Open()
for n= 1 to 3
Worksheets(n).visible=true
next n
End Sub
Private Sub Workbook\_BeforeClose(Cancel As Boolean)
for n= 1 to 3
Worksheets(n).visible=xlVeryHidden
next n
End Sub
Dann die Makros per Passwort schützen, nützt ein wenig gegen NormalUser.
Gruß
Reinhard
von: Harald Kapp
Geschrieben am: 06.11.2003 08:19:06
Private Sub Worksheet\_Change(ByVal Target As Excel.Range)
Const Logfilename = "\Archiv\\Aenderungen\_log.txt"
Dim User As String
Dim Protokoll As Long
Dim Logfile As String
Dim Zelle As Range
Dim S\_Alpha As String ' Variable für den String, der der Spalztennummer entspricht (1=A, 2=B, 26=Z, 27=AA...
User = UserName()
Logfile = ActiveWorkbook.Path & Logfilename ' Logfile im gleichen Pfad ablegen, wie die Excel-Datei.
Open Logfile For Append As #1
' Behandlung der Spalten\>Z, da dann mit AA, AB etc. weitergemacht wird.
If Target.Column \> 26 Then
S\_Alpha = Chr(Asc("A") + (Target.Column \ 26) - 1) & Chr(Asc("A") + (Target.Column Mod 26) - 1) ' = div-Operator
Else
S\_Alpha = Chr(Asc("A") + Target.Column - 1)
End If
' Chr (Asc("A") + Target.Column - 1) oops, diese Zeile ist wohl überflüssig. Überbleibsel vom Testen
' Wurde 1 Zelle geändert (count=1) oder mehrere (Else-Zweig) ?
' Die Print-Anweisung schreibt einfach den dahinter mit & gebildeten Stringg in das Logfile
If Target.Cells.Count = 1 Then
Print #1, Date & ", " & User & ": " & "geänderter Bereich = " & ActiveSheet.Name & ", " & S\_Alpha & Target.Row & Chr(13) & \_
"alter Wert = """ & AlterWert & """" & Chr(13) & \_
"neuer Wert = """ & Target.Text & """" & Chr(13)
Else
For Each Zelle In Target
Print #1, Date & ", " & User & ": " & "geänderter Bereich = " & ActiveSheet.Name & ", " & S\_Alpha & Zelle.Row & Chr(13) & \_
"alter Wert = """ & "nicht zu ermitteln" & """" & Chr(13) & \_
"neuer Wert = """ & Zelle.Text & """" & Chr(13)
Next Zelle
End If
Close #1
End Sub
' Diese Routine sichert lediglich VOR einer Änderung den bisherigen Wert der Zielzelle
' da nach der Änderung (wenn Sub Worksheet\_Change() aufgerufen wird, siehe oben) der alte Wert nicht mehr zur Protokollierung
' zur Verfüguzng steht
Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)
AlterWert = Target ' Wert sichern, wenn neue Zelle selektiert wird. Ersatz für ein "Before\_Change" Ereignis.
End Sub
' Fragt den User Namen vom System ab und begrenzt ihn auf max. 100 Zeichen
Function UserName() As String
Dim B As String \* 100
Dim L As Long
L = 100
GetUserName B, L
UserName = Left(B, L - 1)
End Function
Hallo, Tom!
nein das ist es nicht. Ich möchte nicht gegen Veränderungen
schützen sondern Veränderungen protokolieren.
Gibt leider keine sichere Möglichkeit. Eine Variante wäre das Vergleichen von Vorher zu Nachher mittels Diff-Tools. Willste aber nicht, vermute ich. Protokolliert auch nicht die mehrfache Änderung von A nach B und dann nach C, falls diese benötigt sein sollte.
Die angebotene Protokoll-Funktion kann der DAU oder das Cleverle abschalten. Also auch nicht.
Eine weitere, nicht zu komplexe Möglichkeit wäre ein Makro. Excel bietet diverse Ereignisse an, auf die Du per VBA reagieren kannst. Hier wären v. a. Workbook_SheetChange, Workbook_NewSheet (oder Worksheet_Change en detail bei nur selektiv zu protokollierenden Tabellen; funktioniert aber nicht bei neu erstellten Tabellen, wenn Du nicht per VBA den entsprechenden VBA-Code hinzufügst [sic!]). Die übergebene Rangevariable Target kannst Du dann nach belieben in andere Dateien oder versteckte Tabellen protokollieren. (Diese Protokolltabelle am besten mit .Visible=xlSheetVeryHidden so ausblenden, dass sie nicht über „Einblenden“ wieder sichtbar gemacht werden kann, sondern nur per VBA). Manko logischerweise: Makros müssen aktiviert sein.
Du siehst, sicher ist nichts (die Frage wäre: Wie sicher muss die Lösung sein) und umgehen kann man alles, wenn man denn nur will. Die beste Variante wäre imho die Makrogeschichte. (Oder die Observation per Webcam oder durch die Geheimdienste dieser Welt.)
Gruß, Manfred
Hallo zusammen,
es geht hier darum eine Buchführung „revisionsicher“ zu machen und nicht darum jemanden zu bespitzeln. Nur das dies nicht falsch verstanden wird.
Tom
Hallo Manfred
habe das entsprechende Problem so gelöst, dass alle Tabellen einen Schreibschutz haben, aussser den Zellen auf denen Eingaben gemacht werden. Vor dem Speichern werden nun alle definierten Zellen in eine Zeile auf einem Logfile (separate, schreibgeschützte Tabelle)geschrieben.
Somit habe ich den Aenderungsverlauf der einzelnen Zellen.
Dies funktoniert natürlich nur, wenn vom Enduser keine Blattänderungen vergenommen werden können. Damit das Makro aktiviert wird habe ich ebenfalls alle Blätter ausgeblendet. Bis auf eines mit dem Hinweis „Bitte Makros aktivieren“. Beim Makrostart werden dann alle anderen Blätter eingeblendet.
Gruss Urs