AW: Änderungen und Benutzer in Datei speichern
-
Hallo Rudi, hallo Andreas,
ich weiß nicht, das permanente Öffnen und Schließen einer (temporären) Datei verlangsamt doch sehr die Leistung (ich sag jetzt nicht Performance!).
Aber mein Code hat nicht ganz funktioniert, hier nochmal eine bessere Version:
Option Explicit
Public log As String
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim aw
If Not Me.Saved Then
aw = MsgBox("Sollen Ihre Änderungen in """ & ThisWorkbook.Name & """ gespeichert werden?" _
, vbExclamation + vbYesNoCancel)
If aw = vbCancel Then
Cancel = True
Exit Sub
End If
'hier der Code, der wirklich nur beim Schließen ausgeführt werden soll
If aw = vbNo Then ThisWorkbook.Saved = True
If aw = vbYes Then SaveWB
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
If SaveAsUI Then
MsgBox "Die Datei darf nicht unter anderem Namen gespeichert werden!"
Else
SaveWB
End If
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
log = log & _
Format(Now, "dd.mm.yy hh:mm") & ";" & Environ("USERNAME") & ";""" & Sh.Name & """;""" & _
Target.Address(0, 0) & """;""" & WorksheetFunction.Substitute(Target.Text, Chr(34), "''") & """" & vbLf
End Sub
Private Sub SaveWB()
Dim ff As Integer
Dim fn As String
fn = Left(Me.FullName, Len(Me.FullName) - 4) & "_LOG.csv"
Application.EnableEvents = False
On Error Resume Next
ThisWorkbook.Save
If Err.Number > 0 Then
MsgBox Err.Description, vbCritical, "Fehler"
Else
Me.Saved = True
ff = FreeFile
Open fn For Append As #ff
If Err.Number > 0 Then
MsgBox Err.Description, vbCritical, "Fehler beim sichern der Logdatei"
Else
Print #ff, log;
Close #ff
log = ""
End If
End If
Application.EnableEvents = True
End Sub
Gruß Matthias