Stimmt! - sagte ich ja - hat sich überholt ;)
Daraus ergibt sich die Lösung einer Datenfeld (Array) Variablen - PUBLIC
Die wird beim Start auf die Anzahl der Arbeitsblätter dimensioniert und mit FALSE versorgt
Das CHANGE Ereignis setzt TRUE ins richtige Datenfeld und das BEFORE SAVE Ereignis wertet schrittweise aus
Private Sub Workbook_Open()
ReDim mChange(1 To Sheets.Count)
Dim x As Long
For x = LBound(mChange) To UBound(mChange)
mChange(x) = False
Next x
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
mChange(Sh.Index) = True
End Sub
Option Explicit
Public mChange() As Variant
'Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Application.EnableEvents = False
'Sh.Range("B1").Value = Date
'Sh.Range("C1").Value = Time
'Sh.Range("D1").Value = Application.UserName
'Application.EnableEvents = True
'End Sub
Sub testChange()
Dim x As Long
For x = LBound(mChange) To UBound(mChange)
If mChange(x) = True Then
With Sheets(x)
.Range("B1").Value = Date
.Range("C1").Value = Time
.Range("D1").Value = Application.UserName
End With
End If
Next x
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Modul1.testChange
'Debug.Print "test"
End Sub
Soweit so gut, deine Idee hat es gerettet, nur .....
Ein Anwender der seine Änderung(e) rückgängig gemacht hatte wird ebenfalls "verhaftet" und hat er eine Tabelle angefügt, dann ist schon wieder ein neues Konstrukt fällig
|